2016-05-20 4 views
1

У меня есть 4 таблицы, 3 данные и 2 сводной таблицы:Laravel SQL Query Builder

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 = «SELECT projects.id, projects.name ИЗ проектов INNER JOIN project_user о.е. ON projects.id = pu.project_id UNION ALL ВЫБРАТЬ projects.id, projects.name ОТ проектов INNER JOIN tasks t ON projects.id = t.project_id INNER JOIN task_user tu ON t.id = tu.task_id "; Любое предложение? – mastercheef85