2016-07-29 67 views
0

关系:收据的hasMany了LineItemLaravel 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列表中的另一列)。

这是甚至可能与雄辩?

UPDATE

我解决它通过使用DB查询来代替雄辩的(但我喜欢一个雄辩的解决办法,如果有人能帮助)

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

如果这可以转换成雄辩查询,这将是有趣的。

+0

为什么不使用 - > first()而不是get() – ClearBoth

+0

@ClearBoth我需要所有的收据,但只有** first ** lineitem。 – karmendra

回答

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

好吧,这给了我整个第一行项目。我需要在此查询中仅从line_item中选择一列。 – karmendra

+0

你需要哪一列?看到更新的答案。 – ClearBoth

+0

'value()'函数返回空数组 – karmendra

0

我解决它通过使用机锋加入,令人惊讶它的工作(没有关于雄辩文件加入)

新增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) 
;