2017-02-17 62 views
1

我有物品和圖像表與一對多的關係。加入表一對多關係只有第二個表的一行

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() 

這將返回所有圖像,但我只想要第一個圖像。 第一個()不工作,限制(1)不工作

我想要結果:1個項目與其第一個圖像。如何實現這個?

回答

0

試試這個

$items = DB::table('items') 
    ->leftjoin('item_images','items.id','=','item_images.item_id') 
    ->select('items.id', 'items.name', 'item_images.image_file') 
    ->distinct() 
    ->get(); 

您可以使用加入,但它不如我們雄辯的關係。

0

你有三個步驟來解決這個問題:

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

我還沒有一臺機器上測試該

相關問題