Задать вопрос
@snake2
Сразу пишу legacy код

Как убрать лишний join в query builder?

Есть обычный запрос к бд с помощью query builder laravel
Но также при получении выборки может использоваться условие
$user = USER::query
    ->where(active, '=', 1)
    ->join('roles', 'roles.user_id', '=', 'user_id')
    ->where(function ($query) {
        if($roleId) {
            $query->where('role', '=', $roleId)
        }
    })
    ->get()

Можно ли как-то красиво избавиться от join если $roleId = null
Пока в голову лезет только такое решение

$user = USER::query
    ->where(active, '=', 1)
    ->join('roles', function($join) {
         if($roleId) {
            $join->on('roles.user_id', '=', user.id)
        }
    })
    ->where(function ($query) {
        if($roleId) {
            $query->where('role', '=', $roleId)
        }
    })
    ->get()
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Loftschool
    Комплексное обучение PHP
    6 недель
    Далее
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
Решения вопроса 1
@vism
$userQuery = USER::query()
    ->where(active, '=', 1);
if($roleId){
    $userQuery->join('roles', 'roles.user_id', '=', 'user_id')
    ->where('role', '=', $roleId);
}
$user = $userQuery->get()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@jazzus
С помощью отношений
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы