我想在另一个关系中使用where子句而不是我当前选择的模型,如下表
table Customer
-------id-----customer_name
Table ModelA
table Customer
-------id-----fk_custome_id
table ModelB
-------id-----fk_ModelA_id
控制器中的功能
$data['data'] = customer::with(['modelA','modelA.modelB'])
->where('fk_customer_id', 2)->get();
客户模式
final function ModalA (){
return $this->hasMany('App\Models\ModelA', 'fk_customer_id', 'id');
}
ModelA模型
final function Modelb (){
return $this->hasMany('App\Models\ModelB', 'fk_modelA_id', 'id');
}
错误: 我将得到如下错误,因为select sql在表customer中找不到列名fk_customer_id,那么如何在fk_customer_id(在表ModelA中)中找到哪里。
答案 0 :(得分:1)
您可以使用whereHas
之类的:
$data['data'] = customer::with(['modelA','modelA.modelB'])
->whereHas('modelA', function ($query) {
$query->where('fk_customer_id', 2);
})->get();
这是因为当您与您一起使用时,您只是急切地加载限制,但您不会将其附加到主要查询(customer
模型)。所以有两种方式:一种是现代的,使用whereHas
或使用join
查询。