2016-05-20 16 views
1

私は4つのテーブル、3つのデータ及び2のピボットテーブルがあります。今、私は取得したいLaravel SQLクエリビルダ

projects 
----------- 
id | name 

tasks 
------------ 
id | name | project_id 

users 
------------ 
id | name 

project_user 
------------ 
project_id | user_id 

task_user 
------------ 
task_id | user_id 

は、特定のユーザーに直接割り当てられているいずれかのすべてのプロジェクトのリストであるか、タスクがありますこのユーザーに割り当てられています。

私はすでに多くのことを試していましたが、どういうわけか、実際にはうまくいかず、Laravel Query Builderでどうすればいいのか分かりません。ここで

は私の最後のSQLクエリです:

$projects = \DB::select(\DB::raw("SELECT * FROM projects, project_user 
WHERE EXISTS (
    SELECT 1 FROM tasks, task_user 
    WHERE tasks.status = 0 
    AND tasks.id = task_user.task_id 
    AND task_user.user_id = '".$userId."') 
AND projects.status = 0 
AND projects.id = project_user.project_id 
AND project_user.user_id = '".$userId."'")); 

私はそれを達成するためのクエリを作る必要はどうすればよいですか?

Laravel Query Builderで作成することはできますか?

ご協力ありがとうございます!

答えて

1

UNION ALLを使用すると、ORを使用せずに両方のデータセットを取得できます。

$projects = \DB::select(\DB::raw(" 
SELECT p.id, p.name 
FROM projects p 
INNER JOIN project_user pu ON p.user_id = pu.user_id 
UNION ALL 
SELECT p.id, p.name 
FROM projects p 
INNER JOIN tasks t ON p.id = t.project_id 
INNER JOIN task_user tu ON t.id = tu.task_id 
")); 
+0

ありがとうございますが、うまくいきません。私は今、多くの結果を得ています。 しかし、正直言って、私は私の記述を間違えてしまった。もちろん私はピボットテーブルを持っているときにプロジェクトテーブルにuser_idを持っていません。 私は次のようにあなたのSQLを変更: $のSQLQuery =「プロジェクトのprojects.id、projects.name を選択 INNER ALL SELECTのprojects.id projects.id = pu.project_id UNION ON project_user PUのJOIN、projects.name プロジェクトから INNER JOINタスクt ON projects.id = t.project_id INNER JOIN task_user tu ON t.id = tu.task_id "; いずれかをお勧めしますか? – mastercheef85

関連する問題