Laravel 5.1复杂关系查询生成器

时间:2016-07-29 21:32:16

标签: laravel laravel-5 eloquent laravel-5.1

关系:收据有多个LineItems

$columns = ['rece_id','rece_user_id','rece_name','rece_date']

$builder = Receipt::select($columns)
        ->with('lineItems')
        ->where('rece_user_id', Auth::user()->id)

dd($builder->get()->toArray());

上面的代码为我提供了所有相关订单项(所有列)的收据。

我只需要第一个订单项的一列,例如liit_description。 (我需要将其作为$columns列表中的另一列)。

Eloquent甚至可以这样做吗?

更新

我通过使用DB查询而不是Eloquent来解决它(但我更喜欢Eloquent解决方案,如果有人可以提供帮助的话)

        $builder = DB::table('receipts')->select($columns)
        ->join('line_items', function ($join) {
            $join->on('receipts.rece_id', '=', 'line_items.liit_rece_id');
        })
        ->where('rece_user_id', Auth::user()->id)
        ;

如果可以将其转换为Eloquent查询,那将很有趣。

2 个答案:

答案 0 :(得分:0)

$builder = Receipt::with(['lineItems' => function ($query) {
        $query->first('liit_description');
    }])->where('rece_user_id', '=', Auth::user()->id)->get($columns);

答案 1 :(得分:0)

我通过使用与Eloquent的加入来解决它,令人惊讶的是它有效(没有关于加入Eloquent Doc的内容)

在$ columns数组中添加了liit_description,并且

$builder = Receipt::select($columns)
    ->join('line_items', function ($join) {
        $join->on('receipts.rece_id', '=', 'line_items.liit_rece_id');
    })
    ->where('rece_user_id', Auth::user()->id)
;