PHP Laravel许多雄辩的不同查询

PHP Laravel许多雄辩的不同查询,php,laravel,eloquent,many-to-many,Php,Laravel,Eloquent,Many To Many,我有两张桌子 具有多对多关系的项目和类别,因为项目可以位于多个类别之下 在Laravel 5.4中,我在使用category_项目透视表的两个模型上设置了多个关系 我想检索一系列类别下的所有项目 对于单个类别,这很好 $Projects = Category::find(1)->projects()->distinct(); 但是,当我将要查找的ID数组传递给find方法时,我得到一个错误“methodprojects不存在”,我认为这是因为它返回了一个集合 $Projects

我有两张桌子 具有多对多关系的项目和类别,因为项目可以位于多个类别之下

在Laravel 5.4中,我在使用category_项目透视表的两个模型上设置了多个关系

我想检索一系列类别下的所有项目

对于单个类别,这很好

$Projects = Category::find(1)->projects()->distinct();
但是,当我将要查找的ID数组传递给find方法时,我得到一个错误“methodprojects不存在”,我认为这是因为它返回了一个集合

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

我这样做对吗?我需要做什么才能获得类别ID列表中的项目(在本例中为1和2)。

如果您想要属于类别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();

谢谢这个。。。我要试一试!我能在get的末尾附加分页()吗?我试试看。。。我对eloquent很陌生,collect()和map()方法对我来说是新的。学习他们做什么的好时机。。。再次感谢。@user1002794
collect
与雄辩没有直接关系。它与基本上是laravel的OOP/fluent对数组的替换相关,也用于模型结果集中。