使用where子句从Laravel中的联接查询中获取数据

时间:2018-10-02 17:30:46

标签: mysql database laravel where-clause

我正在使用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子句中尝试了不同的条件,但是没有获得正确的必需数据。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

存在该问题的原因在于,当您从Users中进行选择时,您将使所有用户left Joined拥有一个任务实例。因此,如果User1具有Task1Task2,则此处仅匹配Task1,因为它将User1与{{ 1}}。为了列出未分配的用户,您的查询将类似于以下内容:

task_users