2015-05-09 35 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該數組和搜索空陣列,然後刪除商店對象。有沒有更好的方法不從數據庫中獲取?

回答

相關問題