2014-10-16 63 views
0

我想挑選Shop s與指定的$item_id限制聯接爲1

一個Item可以有多個Image s,但我只想要第一個

當前的代碼僅給出第一張圖像,但它會複製該項目的次數與有圖像的次數相同。

下面的代碼:

$shops = Shop::with(array('items' => function($query) use ($item_id) { 

        $query->select('items.id', 'items.name', 'items_images.path AS image'); 
        $query->join('items_images', 'items.id', '=', 'items_images.item_id'); 
        $query->where('items.id', '=', $item_id); 

       })) 
       ->get(array('shops.id', 'shops.shop_name', 'shops.lat', 'shops.lng')); 

電流輸出:

enter image description here

如何避免讓所有的重複?

+0

什麼決定了第一個?我的意思是你可以添加一個組,但我不知道你是否有什麼特定的要求顯示什麼圖像(組可以自由選擇顯示哪一行) – 2014-10-16 15:00:29

+0

哦,我忘了提到這一點。第一個是'main = 1' – Maeh 2014-10-16 15:03:50

+1

我在結果中看不到主要的那個?你不能只在JOIN中指定那個嗎? – 2014-10-16 15:06:46

回答

1

我認爲這會工作..我還沒有與此語法做了很多工作,在所有的,但我認爲這是它是如何工作的(假設主要是在items_images表)

$shops = Shop::with(array('items' => function($query) use ($item_id) 
{ 

    $query->select('items.id', 'items.name', 'items_images.path AS image'); 
    $query->join('items_images', function($join) 
    { 
     $join->on('items.id', '=', 'items_images.item_id') 
       ->where('items_images.main', '=', 1); 
    }) 
    $query->where('items.id', '=', $item_id); 
}))->get(array('shops.id', 'shops.shop_name', 'shops.lat', 'shops.lng')); 

找到了DOCS在它上面......如果你想將它包含在JOIN中,那麼它看起來像你必須添加一個地方JOIN