2016-07-29 103 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) 
;