我正在使用laravel和angularjs创建一个系统,在这里我将任务分配给用户。多个任务有多个用户,反之亦然。在数据库中,我有以下表:
任务:id |名称
任务用户:id |任务id |用户id
用户:id | name
在我的视图中,我使用任务表的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 |任务2
3 |任务3
用户:
id |名称
1 |用户1
2 |用户2
3 |用户3
4 |用户4
5 |用户5
6 |用户6
7 |用户7
8 |用户8
9 |用户9
10 |用户10
任务用户:
id |任务id |用户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子句中也尝试了不同的条件,但没有得到正确的所需数据。我做错什么了?
1条答案
按热度按时间hgtggwj01#
问题的存在是因为当您从
Users
,获得所有用户left Joined
使用单个任务示例。所以如果User1
有Task1
以及Task2
,仅限Task1
会在这里匹配,因为它会匹配User1
到了第一排task_users
. 为了列出未分配的用户,您的查询将如下所示: