2014-10-16 27 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