2015-05-09 63 views
2

我有3个表获取对象的列表,只有当的hasMany关系具有元素

Shops - id, place_id, name... 
Products - id, shop_id, name ... 
Product_Tag - product_id, tag_id ... (pivot table) 
Tags - id.... 

而且我想获得在阵列的结果是这样的:

array [ 
    0 => [ 
    "id" => 1, 
    "name" => "Shop name", 
    "products" => [...] 
    ] 
] 

,但我想搜吧通过place_id和标签名称。类似这样的:

$shops = Shop::where('place_id', 1) 
    ->with(array('products' => function($query) 
    { 
     $query->whereHas('tags', function ($query) { 
      $query->where('slug', 'tagname1'); 
     }); 
    }))->get(); 

这是行得通的。但是,如果没有任何商店产品具有该标签,我仍然会使用空产品数组获得Shop对象。如果在该商店中,至少有一种产品具有该标签,那么一切都可以。如果它有空的产品列表,我不想购物。此外,我认为这是开销foreach该数组和搜索空阵列,然后删除商店对象。有没有更好的方法不从数据库中获取?

回答

相关问题