我正在使用Laravel和AngularJS创建一个系统,在其中向用户分配任务。多个任务有多个用户,反之亦然。在数据库中,有以下表格:
任务: id |名称
task_users: id | task_id | user_id
个用户: id |名称
在我看来,我使用任务表的ID显示特定任务。我显示未分配给特定任务的用户(称为未分配用户)列表。分配该用户后,其名称将从列表中删除。
为此,我使用了以下查询:
public static function remainingUser($task_id)
{
return \DB::table('users')
->leftjoin('task_users', 'task_users.user_id', '=', 'users.id')
->select('users.id',
'users.name as name'
)
->where('task_id', '!=', $task_id)
->orWhere('task_id', null)
->get();
}
假设我有此数据
任务:
id |名称
1 |任务1
2 | Task2
3 | Task3
用户:
id |名称
1 |用户1
2 |用户2
3 |用户3
4 |用户4
5 |用户5
6 |用户6
7 |用户7
8 |用户8
9 |用户9
10 |用户10
task_users:
id | task_id | user_id
1 | 1 | 1
1 | 1 | 2
1 | 1 | 3
1 | 1 | 5
1 | 1 | 6
1 | 1 | 7
1 | 2 | 2
1 | 2 | 4
现在假设我正在显示task_id = 1的任务详细信息,并且我想将用户4分配给该任务。因此,我的未分配用户列表应包含未分配此任务的所有用户。我的查询未返回所需数据。我还在where子句中尝试了不同的条件,但是没有获得正确的必需数据。我在做什么错了?
答案 0 :(得分:0)
存在该问题的原因在于,当您从Users
中进行选择时,您将使所有用户left Joined
拥有一个任务实例。因此,如果User1
具有Task1
和Task2
,则此处仅匹配Task1
,因为它将User1
与{{ 1}}。为了列出未分配的用户,您的查询将类似于以下内容:
task_users