我有两个模型用户和任务,它们之间具有多对多的关系,任务具有自嵌套关系,
现在我想让用户谁是当前自由的,即没有任务分配或分配的任务有状态,要么完成或关闭,下面是我写的代码和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
为什么不换一种方式。。。。
帮我把没有未完成任务的员工叫来。。。
$freeEmployees = User::where('role', 'employee')->whereDoesntHave('tasks', function ($q) {
$q1->where('status', config('taskstatus.running'))
->orWhere('status', config('taskstatus.uncompleted'));
});
})->get()->take($limit);