簡體   English   中英

從第二個表中僅連接表一到多個關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM