2015-10-31 2 views
1

У меня есть 3 отношений:3 отношение, как должна выглядеть база данных и как создавать запросы с помощью Laravel Eloquent?

project может иметь много tasks и tast имеет один project

user может иметь много tasks и task может иметь много users

user может иметь много projects и project может иметь много users -> это отношение у меня уже есть в сводной таблице project_user

Как выглядят другие таблицы и как я могу их запросить, чтобы принять все tasks для текущего пользователя и идентификатора проекта?

ответ

1

Таблица Задача должна иметь «внешний ключ» project_id. Затем вы можете найти все задачи, связанные с одним проектом.

Вы должны иметь таблицу для связывающих пользователей и задач, как user_task с двумя полями: user_id/task_i d

Вы уже project_user для последней части.

Чтобы запросить их: Чтобы получить все проектные задачи

SELECT * FROM task WHERE project_id = {project_id} 

Получить все задачи для пользователя:

SELECT DISTINCT task.* 
FROM user_task 
INNER JOIN task ON task.id = user_task.task_id 
WHERE user_task.user_id = {user_id} 

Получить все задачи для пользователя и идентификатор проекта

SELECT DISTINCT task.* 
    FROM user_task 
    INNER JOIN task ON (task.id = user_task.task_id AND project_id = {project_id}) 
    WHERE user_task.user_id = {user_id} 

С Красноречивым:

DB::table('user_task') 
      ->join('task', function($join) 
     { 
      $join->on('task.id', '=', 'user_task.task_id')->where('project_id', '=', {project_id}) 
     }) 
->where('user_task.user_id', '=', {user_id}) 
     ->get(); 
+0

Но что делать, если я использую таблицы MyISAM? –

+0

Это то же самое, за исключением того, что у вас не будет никаких ограничений на уровне DB по сравнению с InnoDB. Что ничего не меняет. –

+0

Я думаю, что «иностранный ключ» не работает с MyISAM. Также мне нужны запросы с Eloquent –

Смежные вопросы