때때로 Laravel 모델에서 관계를 로드하고 싶을 때 반환되는 관련 모델의 수를 제한하고 싶을 수도 있습니다.
예를 들어 블로그 플랫폼에서는 시스템의 모든 작성자와 게시물 3개를 로드하려고 할 수 있습니다.
Laravel의 이전 버전에서는 Eager 로드 관계를 제한하는 것이 약간 까다로운 작업이었습니다. 나는 옳다고 느껴지는 우아한 방법을 결코 찾을 수 없었습니다. 그래서 저는 보통 이 기능을 추가하는 Jonas Staudenmeir(@staudenmeir)의 staudenmeir/eloquent-eager-limit 패키지를 설치했습니다.
그러나 올해 초 해당 패키지의 핵심 기능이 Laravel 프레임워크 자체에 병합되었습니다. 따라서 이는 Laravel 11에서 추가 패키지를 설치할 필요 없이 즉시 로드되는 관계를 제한할 수 있음을 의미합니다.
예를 살펴보겠습니다.
블로깅 플랫폼이 있고 시스템의 모든 작성자와 게시물 3개를 로드하려고 한다고 가정해 보겠습니다.
Eager 로딩 쿼리에서 Limit 메소드를 사용하여 이를 달성할 수 있습니다:
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();
위의 코드 예제에서 볼 수 있듯이 App\Models\Author 모델에서 게시물 관계를 즉시 로드하려고 정의했습니다. 즉시 로드 쿼리에서는 세 개의 게시물만 로드하도록 지정하기 위해 제한 메서드를 사용했습니다.
관심 있는 분들을 위해 위의 쿼리는 두 개의 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`추가 자료
이 게시물을 재미있게 읽으셨다면 비슷한 주제를 더 깊이 있게 다루는 220페이지 분량의 제 전자책 "Battle Ready Laravel"을 확인해 보시는 것도 좋습니다.
또는 Laravel을 사용하여 다른 서비스에서 API를 사용하는 방법을 알려주는 다른 440페이지짜리 전자책 "Laravel에서 API 사용"을 확인해 보세요.
제가 새 게시물을 게시할 때마다 최신 소식을 받고 싶으시면 언제든지 제 뉴스레터에 가입하세요.
계속해서 멋진 것들을 만들어 보세요! ?
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3