@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()
  • Вопрос задан
  • 120 просмотров
Решения вопроса 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
С помощью отношений
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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