如何在laravel雄辩的关系中使用?

时间:2016-09-13 06:46:58

标签: php laravel-5 eloquent

我想在另一个关系中使用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中)中找到哪里。

1 个答案:

答案 0 :(得分:1)

您可以使用whereHas之类的:

$data['data'] = customer::with(['modelA','modelA.modelB'])
     ->whereHas('modelA', function ($query) {
         $query->where('fk_customer_id', 2);
     })->get();

这是因为当您与您一起使用时,您只是急切地加载限制,但您不会将其附加到主要查询(customer模型)。所以有两种方式:一种是现代的,使用whereHas或使用join查询。