我有三张牌桌:A,B&下进行。
表A:
表B:
表C:
现在,我希望在使用Eloquoent关系进行查询之后执行此操作。
select * from A, B, C where A.B_id = B.id and B.C_id = C.id and C.state = 1
我对每个模型中的关系进行了decalred并执行并执行了以下查询:
A::with(['b' => function($query) {
$query->with(['C'=> function($q) {
$q->where('state', 1);
}]);
}])->get();
但是,我没有得到预期的结果。
我在这里缺少什么?
答案 0 :(得分:0)
当您使用范围with
时,您只会过滤关系,而不是您要查询的顶级模型。您经常需要同时执行查询和范围with
。
示例:
A::query()
->whereHas('b.c', function ($q) {
$q->where('state', 1);
})
->with([
'b.c' => function ($q) {
$q->where('state', 1);
},
])->get();
答案 1 :(得分:0)
试试这个:
A::join('B', 'B.id', '=', 'A.B_id')
->join('C', 'C.id', '=', 'B.C_id')
->select(...)
->where('C.state', 1)
->get();
在选择方法中,您可以指定要为每个表选择的字段,例如:
->select('A.*', 'B.company', 'C.state')