laravel过滤器

e0bqpujr  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(375)

我有两个模型,用户和任务之间有多对多的关系,任务本身作为父级和子级有自嵌套的关系,
现在我想获得用户谁是目前免费的,即没有任务分配或分配任务的状态,要么已完成或关闭,下面是我写的代码和tosql的,但我仍然得到用户与其他状态的任务,如进行中和审查中

$freeEmployees = User::where('role', 'employee')->where(function ($q) {
           $q->doesntHave('task')
             ->orWhereHas('task', function ($q1) {
               $q1->where('status', config('taskstatus.completed'))
                   ->orWhere('status', config('taskstatus.closed'));
           });
       })->get()->take($limit);
SELECT
    *
FROM
    `users`
WHERE
    `role` = 'employee' AND(
        NOT EXISTS(
        SELECT
            *
        FROM
            `task_checklist`
        INNER JOIN `user_task` ON `task_checklist`.`id` = `user_task`.`task_id`
        WHERE
            `users`.`id` = `user_task`.`user_id` AND `task_checklist`.`archived_at` IS NULL
    ) OR EXISTS(
    SELECT
        *
    FROM
        `task_checklist`
    INNER JOIN `user_task` ON `task_checklist`.`id` = `user_task`.`task_id`
    WHERE
        `users`.`id` = `user_task`.`user_id` 
        AND(
            `status` = 'Completed' OR `status` = 'Closed') 
        AND `task_checklist`.`archived_at` IS NULL
)
    )
ORDER BY
    `updated_at`
DESC
nukf8bse

nukf8bse1#

为什么不换一种方式。。。。
在员工没有未完成任务的情况下给我接他们。。。

$freeEmployees = User::where('role', 'employee')->whereDoesntHave('tasks', function ($q) {
               $q1->where('status', config('taskstatus.running'))
                   ->orWhere('status', config('taskstatus.uncompleted'));
           });
       })->get()->take($limit);

相关问题