본문 바로가기

개발/Laravel

Laravel Query Builder Logical Grouping

Laravel DB Query Builder 논리적 그룹화에 대해 작성한다.

 

복잡한 쿼리의 작성 및 우선순위 조정을 위해 where 절을 그룹화할 필요가 있을때 Laravel 에서는 where 메서드에 클로저를 전달할 수 있다.

 

// 쿼리빌더
$users = Music::with('album')
        ->where(function ($query) {
          $query->where('title', 'like', '%'.$searchText.'%')
          		->orWhere('album.title', 'like', '%'.$searchText.'%');
        })->where(function ($query) {
          $query->where('genre', 'Jazz')
          		->where('sub_genre', 'Lofi Jazz')
        })->orderBy('idx','desc')
        ->get();
// 위 쿼리빌더를 통해 생성되는 쿼리
select * from music 
left join album on music.album_idx = album.idx 
where (music.title like '%searchtext%' or album.title like '%searchtext%') 
and (music.gerne = 'Jazz' and music.sub_genre = 'Lofi Jazz');

 

참고자료:

laravel.com/docs/8.x/queries#additional-where-clauses