簡體   English   中英

使用where子句從Laravel中的聯接查詢獲取數據

[英]use where clauses to get data from join query in Laravel

我正在使用Laravel和AngularJS創建一個系統,在其中向用戶分配任務。 多個任務有多個用戶,反之亦然。 在數據庫中,有以下表格:

任務:id | 名稱

task_users:id | task_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 | User6

7 | User7

8 | User8

9 | USER9

10 | User10

task_users:

id | task_id | 用戶身份

1 | 1 | 1

1 | 1 | 2

1 | 1 | 3

1 | 1 |

1 | 1 | 6

1 | 1 | 7

1 | 2 | 2

1 | 2 | 4

現在,假設我正在顯示task_id = 1的任務詳細信息,並且我想將用戶4分配給該任務。 因此,我的未分配用戶列表應包含未分配此任務的所有用戶。 我的查詢未返回所需數據。 我還在where子句中嘗試了不同的條件,但是沒有獲得正確的必需數據。 我究竟做錯了什么?

之所以存在此問題,是因為當您從Users選擇時,您使所有用戶left Joined了單個任務實例。 因此,如果User1具有Task1Task2 ,則此處僅Task1將被匹配,因為它將User1匹配到task_users為他找到的第一行。 為了列出未分配的用戶,您的查詢將類似於以下內容:

public static function remainingUser($task_id)
{
return \DB::table('task_users')
    ->rightJoin('users', 'task_users.user_id', '=', 'users.id')
    ->select(
      \DB::raw("DISTINCT(`users`.`id`)"),
      'users.name as name'
    )
    ->where('task_id', '!=', $task_id)
    ->orWhere('task_id', null)
    ->get();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM