때때로 Laravel 모델에 관계를 로드하고 싶을 때 반환되는 관련 모델의 수를 제한하고 싶을 수도 있습니다.
예를 들어 블로그 플랫폼에서는 시스템의 모든 작성자와 게시물 3개를 로드하려고 할 수 있습니다.
이전 버전의 Laravel에서는 열정적으로 로드된 관계를 제한하는 것이 다소 까다로운 작업이었습니다. 나는 옳다고 느껴지는 우아한 방법을 결코 찾을 수 없었습니다. 그래서 저는 주로 이 기능을 추가하는 Jonas Staudenmeir(@staudenmeir)의 staudenmeir/eloquent-eager-limit 패키지를 설치했습니다.
그러나 올해 초 해당 패키지의 핵심 기능이 Laravel 프레임워크 자체에 병합되었습니다. 즉, Laravel 11에서는 추가 패키지를 설치할 필요 없이 Eager 로드 관계를 제한할 수 있습니다.
예시를 살펴보겠습니다.
블로그 플랫폼이 있고 시스템의 모든 작성자와 게시물 3개를 로드하려고 한다고 가정해 보겠습니다.
Eager 로딩 쿼리의 제한 메소드를 사용하여 이를 달성할 수 있습니다.
use App\Models\Post; use App\Models\Author; use Illuminate\Contracts\Database\Eloquent\Builder; $authors = Author::query() ->with([ 'posts' => fn (Builder $query): Builder => $query->limit(3), ]) ->get();
위의 코드 예시에서 볼 수 있듯이 AppModelsAuthor 모델에서 게시물 관계를 즉시 로드하려고 정의했습니다. 즉시 로딩 쿼리에서는 3개의 게시물만 로드하도록 지정하기 위해 제한 메소드를 사용했습니다.
관심 있는 분들을 위해 위 쿼리는 두 개의 SQL 쿼리를 생성합니다.
첫 번째 쿼리는 데이터베이스에서 저자를 가져옵니다.
SELECT * FROM `authors`
두 번째 쿼리는 각 작성자에 대해 3개의 게시물을 가져옵니다(시스템에 작성자가 5명이라고 가정).
SELECT * FROM ( SELECT *, row_number() OVER (PARTITION BY `posts`.`author_id`) AS `laravel_row` FROM `posts` WHERE `posts`.`author_id` IN (1, 2, 3, 4, 5) ) AS `laravel_table` WHERE `laravel_row` <= 3 ORDER BY `laravel_row`
이 게시물을 재미있게 읽으셨다면 유사한 주제를 더 깊이 있게 다루고 있는 220페이지가 넘는 제 전자책 "Battle Ready Laravel"을 확인해 보시는 것도 좋습니다.
또는 Laravel을 사용하여 다른 서비스에서 API를 사용하는 방법을 알려주는 440페이지가 넘는 다른 전자책 "Laravel에서 API 사용"을 확인해 보세요.
제가 새 게시물을 게시할 때마다 최신 소식을 받고 싶으시면 언제든지 제 뉴스레터에 가입하세요.
계속해서 멋진 것들을 만들어 보세요! ?
위 내용은 Laravel 모델에서 Eager 로드 관계 제한의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!