添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
成熟的红薯  ·  javascript - ...·  1 年前    · 
没人理的米饭  ·  vue.js - how can get ...·  1 年前    · 

whereHas 是可以允许我们向关联来加入 where 的查询约束,但是这里有一个问题, whereHas 是仅支持单条 sql 查询的,也就是说 whereHas 本身是不支持跨库查询的。如果想要学习 whereHas 的用法,可以参考:https://learnku.com/docs/laravel/9.x/eloquent-relationships/12252#d361f0

这几天使用 whereHas , 遇到了一个问题,如下

举个例子,有这样两个表,分别存在不同的数据库里

database1.A
database2.B

PHP 类如下

class A{
  protected $table = 'A';
  public function B()
      return $this->belongsTo(B::class, 'b_id', 'id');
class B{
  protected $table = 'B';

然后我们想这样使用

$query = A::query();
$obj->whereHas('B', function ($q)  {
   $q->where('xxx', xxx)
});

这个时候会报错 Base table or view not found

因为 A表和 B表分别在不同的数据库里,也就是不在同一个数据库里。我们可以把 sql 打印出来

select * from `A` where exists (select * from `B` where `A`.`b_id` = `B`.`id` and `xxx` = xxx)

这样的 sql 肯定跑不通嘛!单条SQL不支持跨库查询

那只能加多一个 数据库前缀,修改的代码如下:

$query = A::query();
$obj->whereHas('B', function ($q)  {
   $q->from('database2.B')->where('xxx', xxx)
});
                                    翻译来源:https://github.com/alexeymezenin/laravel-best-practices单一职责原则不要这样做:public function getFullNameAttribute()
    if (auth()->user() && auth()->user()->hasRole('client') &&amp...
                                    1.with相当于是去用关联模型去关联另一张表,另一张表中没有数据了也会将主表的数据展示出来
RoomInfo::query()->where('shop_code', $data['shop_code'])
                ->with(['item_arranging' => function ($query) use ($week) {
                    $query->select('item_code', 'date', 'start_
                                    好像whereHas方法不能很好地工作.$res = Entreprise::whereHas('labels',function ($q){$q->where('hidden','!=',1);})->whereHas('labels',function ($q){$q->whereHidden(1);})->get();dd(count($res));  //shows...
                                    用 Laravel 很久了,whereHas 简直是连表大杀器,本来需要写大量 SQL 的查询用 whereHas 都可以很快的实现。不过在一些场景里,遇到了严重的性能问题。我们有个A表,大约是百万级数据,与之关联的有个B表,大约万级数据。在做关联查询的时候我们自然使用 A::whereHas('b', function(){...})  。后来发现了许多慢查询,仔细一看发现,Laravel 的 ...
			`gs_store_goods`
		INNER JOIN `gs_store_goods_corner_marks` ON `gs_store_goods`.`id` = `gs_store_goods_cor...
                                    我有会员模型分类帐模型class Member extends Model{public function ledger(){return $this->hasMany('App\Ledger','user_id');}}我必须获取成员的分类账记录(既需要成员又需要分类账数据),其中ledger.created_at =特定日期,例如ledger.created_at = 2017-03-2...
查了好多资料,才发现原来laravel 框架会把配置文件缓存,目的是
为了给应用加速,使用 Artisan 命令config:cache将所有配置文件的配置缓存到单个文件里,这将会将所有配置选项合并到单个文件从而可以被框架快速加载。
应用一旦上线,就要运行一次php artisan config:cach...
                                    Laravel ORM中with,wherehas使用和区别
with -预加载
当作为属性访问 Eloquent 关联时,关联数据是「懒加载」的。意味着在你第一次访问该属性时,才会加载关联数据。不过,是当你查询父模型时,Eloquent 可以「预加载」关联数据。预加载避免了 N + 1 查询问题。要说明 N + 1 查询问题,试想一个 Book 模型关联到 Author 模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model