Laravel 명명된 쿼리 인수

8238 단어 laravel
쿼리를 작성할 때 쿼리가 예상대로 작동하도록 순서대로 advanced clauses 또는 grouping condition together을 사용할 때 클로저를 사용하는 것이 일반적입니다.

$users = DB::table('users')
           ->where('name', '=', 'John')
           ->where(function ($query) {
               $query->where('votes', '>', 100)
                     ->orWhere('title', '=', 'Admin');
           })
           ->get();


클로저가 많은 더 복잡한 쿼리에서 $query 인수를 반복해서 사용하면 가독성이 떨어질 수 있습니다.

$users = DB::table('users')
           ->where('name', '=', 'John')
           ->where(function ($query) {
               $query->whereHas('role', function ($query) {
                   $query->whereIn('slug', ['leader', 'deputy'])
                        ->whereHas('team', function ($query) {
                            $query->whereIn(
                               'slug', 
                               ['sales', 'finance'],
                            );
                        });
               });
           })
           ->get();

$query 인수를 테이블 이름에 따라 명명된 변수(예: $teams )로 바꾸면 작업을 보다 원활하게 수행할 수 있는 메서드에 작업 중인 테이블이 접두사로 표시됩니다.

$users = DB::table('users')
           ->where('name', '=', 'John')
           ->where(function ($users) {
               $users->whereHas('role', function ($roles) {
                   $roles->whereIn('slug', ['leader', 'deputy'])
                        ->whereHas('team', function ($teams) {
                            $teams->whereIn(
                               'slug', 
                               ['sales', 'finance'],
                            );
                        });
               });
           })
           ->get();


이 접근 방식은 예를 들어 특정 쿼리의 조건을 디버깅하려고 할 때와 같이 여러 줄을 스캔하거나 컨텍스트에서 벗어난 항목을 읽을 때도 도움이 됩니다.

// Need to add the "senior-managers" 
// to the condition for the teams table

// Could this be the right condition,
// which table's slug is this?
$query->whereIn(
   'slug',
   ['sales', 'finance'],
);

// If the query argument has been named,
// then we immediately know which table it is 🙂
$teams->whereIn(
   'slug',
   ['sales', 'finance'],
);

좋은 웹페이지 즐겨찾기