[英]Join table one to many relationship only 1 row from second table
我有一對多關系的項目和圖像表。
1個項目可以有很多圖像,但我只需要1個圖像來加入表格。
$items = DB::table('items')
->leftjoin('item_images', function($join){
$join->on('item_images.item_id','=','items.id');
})
->select('items.id', 'items.name', 'item_images.image_file')
->get()
這將返回所有圖像,但我只想要第一張圖像。 first()不起作用,limit(1)不起作用
我想要結果:1個項目及其第一個圖像。 如何實現這一目標?
嘗試這個
$items = DB::table('items')
->leftjoin('item_images','items.id','=','item_images.item_id')
->select('items.id', 'items.name', 'item_images.image_file')
->distinct()
->get();
你可以使用join,但它對我們更有說服力的關系。
您必須分三個步驟解決此問題:
第1步:找到每個項目的第一張圖片的ID
$minQuery = DB::table('item_images')
->select(DB::raw('min(id) AS id'))
->groupBy('item_id')
->toSql();
第2步:檢索這些圖像的詳細信息
$joinQuery = DB::table('item_images')
->select('item_images.id', 'item_images.item_id', 'item_images.image_file')
->join(DB::raw("($minQuery) AS m"), 'item_images.id', '=', 'm.id')
->toSql();
第3步:使用items
表連接它
$items = DB::table('items')
->select('items.id', 'items.name', 'ii.image_file')
->leftJoin(DB::raw("($joinQuery) AS ii"), 'items.id', '=', 'ii.item_id')
->get();
我沒有在機器上測試過這個
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.