Laravel 5.1复杂关系查询生成器



关系:收货有许多行项目

$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解决了这个问题(但如果有人能帮忙的话,我更喜欢Eloquet解决方案)

        $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查询,那将非常有趣。

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

我通过使用带有Eloquent的Join解决了这个问题,令人惊讶的是它起了作用(Eloquet Doc中没有关于Join的内容)

在$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)
;