【问题标题】:Eager loading with constraint on the eager loaded field对预先加载字段的限制的预先加载
【发布时间】:2016-08-09 10:49:27
【问题描述】:

我有一个员工数据库:

id
name
manager_id

外键是经理id,指向同一张表employees的id。

我想获取员工列表,但仅限于经理姓名为“MANAGER”的位置。

我试过了,但它不起作用:

$employee_list = Employee::with(['manager' => function($query){
            $query->where('name', 'MANAGER');
        }]);

我猜它不起作用,因为它限制了将用名称替换 id 的函数。

如何限制整个结果,以便只获取 manager_id 指向 name = 'MANAGER' 的记录的记录?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    假设您以正确的方式定义关系,要获得结果,您必须使用 get 函数,所以它应该是:

    $employee_list = Employee::whereHas(['manager' => function($query){
                $query->where('name', 'MANAGER');
            }])->get();
    

    从数据库中获取任何结果。

    【讨论】:

    • 我知道,我在问如何获得 manager_id 名称不同于“MANAGER”的所有结果。我可以使用 join 子句,但我想知道这是否可能仅使用 with 语句。我在你只添加的地方写的命令 ->get() 会给我所有的记录,只有当经理的名字是'MANAGER'时才向我显示经理的名字,这不是我想要的,我想要申请的地方在整个结果上,不仅在与经理的链接上。
    • @Richard 您想要的可能是在我编辑的答案中使用whereHas 函数。如果不是这样,对不起,我不能帮助你,因为不清楚你到底想要什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2014-10-28
    • 2021-09-28
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多