PavelUstyugov
@PavelUstyugov
proger support

Как в Laravel перевести запрос с двумя условиями по join?

Имеется сложный запрос.

select `projects`.*, `users1`.email as `user_name`, `users2`.email as `manager_name`, 
`users3`.email as `fb`, 
`project_managers_fb`.user_id as `fb_id`
from `projects` as `projects`
left join
`users` as `users1` on ( `users1`.id = `projects`.user_id)
left join
`users` as `users2` on ( `users2`.id = `projects`.manager_id)
left join
`project_managers` as `project_managers_fb` on ( `project_managers_fb`.project_id = `projects`.id and `project_managers_fb`.integration_id = 1)
left join
`users` as `users3` on ( `users3`.id = `project_managers_fb`.user_id)
WHERE
	`projects`.user_id = 4;


Он извлекает проекты и связанные с ним имена пользователей, лежащих в другой таблице
Запрос работает.

Но как переписать его на builder в laravel. Интересует именно как оформить двойное условия при leftJoin

left join
`project_managers` as `project_managers_fb` on ( `project_managers_fb`.project_id = `projects`.id and `project_managers_fb`.integration_id = 1)


Пробовал разные конструкции - не выходило.
НЕ знаю как оформить условие по двум полям.
  • Вопрос задан
  • 255 просмотров
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
Примерно так:
DB::table('projects')
...
        ->join('project_managers', function ($join) {
            $join->on('project_managers.project_id', '=', 'projects.id')
            ->where('project_managers.integration_id ', '=', 1);
        })
...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@jazzus
В модели Project
public function managers()
{
  return $this->belongsToMany(Manager::class)
              ->withPivot('integration_id');
}

public function managersFirstIntegration()
{
  return $this->managers()
              ->wherePivot('integration_id',ProjectManager::INTEGRATION_ID__FIRST);
}

запрос
Project::has('managersFirstIntegration')
       ->with('managersFirstIntegration')
       ->get();

наименования только изменить в соответствии с логикой
Ответ написан
Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer
https://laravel.com/docs/7.x/queries#joins

Действительно, зачем открывать документацию или залезать в код - проще же задать вопрос тут со словами "не знаю". Гениально.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы