【问题标题】:PHP Laravel manytomany eloquent distinct queryPHP Laravel manytomany 雄辩的不同查询
【发布时间】:2017-12-11 22:41:49
【问题描述】:

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

在 Laravel 5.4 中,我在使用 category_project 数据透视表的两个模型上设置了多对多关系。

我想检索一个类别数组下的所有项目。

对于单个类别,这很好用

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

但是,当我将一个 id 数组传递给 find 方法时,我收到一个错误“方法项目不存在”,我认为这是因为它正在返回一个集合。

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

我是否以正确的方式解决这个问题?我需要做什么才能获得类别 ID 列表的项目(在本例中为 1 和 2)。

【问题讨论】:

    标签: php laravel eloquent many-to-many


    【解决方案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();
    

    【讨论】:

    • 谢谢你...我会试试看的!我可以在获取结束时附加 pagination() 吗?我会试试...我对 eloquent 很陌生,而 collect() 和 map() 方法对我来说是新的。学习他们做什么的好时机......再次感谢。
    • @user1002794 collect 与 eloquent 没有直接关系。它与Laravel collections 相关,基本上是laravel 对数组的OOP/fluent 替换,也用于模型结果集中。
    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2021-07-23
    • 2017-11-11
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多