[英]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
具有Task1
和Task2
,則此處僅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.