2017-07-07 96 views
1

我有兩個表 項目和類別與多對多的關係,因爲項目可以在幾個類別下。PHP Laravel manytomany雄辯鮮明的查詢

在Laravel 5.4中,我在使用category_project數據透視表的兩個模型上設置了許多關係。

我想檢索一系列類別下的所有項目。

對於單個類別能正常工作

$Projects = Category::find(1)->projects()->distinct(); 

然而,當我通過在一組ID查找到find方法我得到一個錯誤「方法的項目不存在」我以爲是因爲它正在返回一個集合。

$Projects = Category::find([1,2])->projects()->distinct(); 

我對此有正確的看法嗎?我需要做些什麼來獲得項目的類別ID列表(在這個例子中是1和2)。

回答

1

如果您想要屬於第1類或第2類的不同項目,則可以通過其他方式(例如,

$categories = [1,2]; 
$projects = Projects::whereHas(["category" => function ($query) use ($categories) { 
     return $query->whereIn("category_id",$categories); 
}])->get(); 

如果你想屬於這兩類項目,那麼你就可以改變你的條件

$projects = Projects::whereHas(["category" => function ($query) use ($categories) { 
    return $query->where(collect($categories)->map(function ($v) { 
      return ["category_id",$v]; 
    })); 
}])->get(); 
+0

感謝這個......我要把這一個去!我可以在get的最後獲得分頁()嗎?我會嘗試一下......我對於雄辯很新,而collect()和map()方法對我來說是新的。學習他們做什麼的好時機......再次感謝。 – user1002794

+0

@ user1002794'collect'直接與口才無關。它與[Laravel集合](https://laravel.com/docs/5.4/collections)有關,它們基本上是laravel的OOP /流暢的數組替換,並且也用於模型結果集。 – apokryfos