将JOIN限制为1

时间:2014-10-16 14:56:08

标签: mysql laravel orm eloquent

我正在尝试使用指定的Shop选择$item_id

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

当前代码仅为我提供了第一张图片,但它与图片一样多次复制该项目。

以下是代码:

$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

如何避免获得所有重复项?

1 个答案:

答案 0 :(得分:1)

我认为这会有效..我还没有完成这个语法,但我认为这是如何工作的(假设main在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中添加一个地方