我有两个模型,用户和任务之间有多对多的关系,任务本身作为父级和子级有自嵌套的关系,
现在我想获得用户谁是目前免费的,即没有任务分配或分配任务的状态,要么已完成或关闭,下面是我写的代码和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
1条答案
按热度按时间nukf8bse1#
为什么不换一种方式。。。。
在员工没有未完成任务的情况下给我接他们。。。