Я работаю с laravel 5.8, и у меня есть четыре таблицы:
клиенты: идентификатор | имя | код
задачи: идентификатор | имя
client_task: id | client_id | task_id
monthlies: id | client_id | task_id | exec_date
Где clients
и tasks
находятся во многих отношениях со многими, а client_task
- это сводная таблица
Идея состоит в том, что я хочу создавать таблицу в html, например,
-------------------------------------------
|#|client name|task 1|task 2|task 3|task 4|
-------------------------------------------
|1| client 1 | ☐ | ☐ | /// | /// |
-------------------------------------------
|2| client 2 | /// | ☐ | ☐ | ☑ |
-------------------------------------------
|3| client 3 | ☐ | ☑ | ☑ | /// |
-------------------------------------------
каждый месяц, я получаю всех клиентов и все задачи, и если у клиента есть задача, я показываю флажок еще я показываю пустую td
и, если я заканчиваю sh задачу для определенного c клиента, я проверяю эту задачу и вставляю client_id
, task_id
и текущую дату exec_date
в monthlies
таблицу .
Я исправляю этот запрос:
$clients = DB::table('monthlies as m')
->rightJoin('client_task as clta', function ($join){
$join->on('clta.client_id', '=', 'm.client_id')
->on('clta.task_id', '=', 'm.task_id')
->rightJoin('clients as cl', function ($join){
$join->on('clta.client_id', '=', 'cl.id')->where('cl.category',1);
})
->Join('category_task as cata', function ($join){
$join->on('clta.task_id', '=', 'cata.task_id')
->Join('categories as ca2', 'cata.category_id', '=', 'ca2.id')->where('ca2.type', 1)
->rightJoin('tasks as ta', 'cata.task_id', '=', 'ta.id')->where('ta.period', 1);
});
})
->select('m.*', 'cl.id as client_id', 'cl.name as client_name', 'cl.code as client_code', 'cl.legal_form as client_legal_form', 'ta.id as task_id', 'ta.name as task_name', 'ta.type as task_type', 'ta.period as task_period')
->get();
с этим кодом я получаю только клиенты / задачи, представленные в таблице client_task
Проблема в том, что я хочу показать всех клиентов или задачи, даже если клиент не имеет прикрепленной задачи и наоборот (отсутствует в сводной таблице client_task
).