关系:收货有许多行项目
$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)
;