Laravel Eloquoent中的复合连接子句

时间:2017-10-16 09:07:31

标签: php mysql database laravel laravel-5.5

我有三张牌桌:A,B&下进行。

表A:

  • ID
  • B_ID

表B:

  • ID
  • C_ID
  • 公司

表C:

  • ID
  • 状态

现在,我希望在使用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();

但是,我没有得到预期的结果。

我在这里缺少什么?

2 个答案:

答案 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')