>백엔드 개발 >PHP 튜토리얼 >Laravel Eloquent를 사용하여 테이블의 각 고유 판매자에 대한 최신 행을 어떻게 검색할 수 있나요?

Laravel Eloquent를 사용하여 테이블의 각 고유 판매자에 대한 최신 행을 어떻게 검색할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-25 14:57:02264검색

How can I retrieve the latest row for each unique seller in a table using Laravel Eloquent?

Laravel Eloquent를 사용하여 Max Created_at로 최신 행 검색

Laravel Eloquent에서 각 고유 필드에 대한 최신 행 검색은 다음을 통해 수행할 수 있습니다. 포괄적인 접근 방식. 판매를 추적하는 특정 테이블에서 각 항목에는 id, Seller_id, amount 및 Created_at와 같은 필드가 포함되어 있으며, 목표는 각 Seller_id에 대한 가장 최근 행을 검색하는 것입니다.

최신 검색 특정 판매자에 대한 행

특정 판매자에 대한 최신 행을 얻기 위해 Laravel Eloquent는 다음과 같은 간단한 방법을 제공합니다.

<code class="php">$sales = Snapshot::where('seller_id', '=', 15)
    ->orderBy('created_at', 'DESC')
    ->first();</code>

이 쿼리는 Snapshot 테이블에서 모든 레코드를 선택합니다. Seller_id가 15이고,created_at를 기준으로 내림차순으로 주문하고 첫 번째 행을 검색하여 해당 판매자의 최신 판매를 효과적으로 반환합니다.

각 판매자의 최신 행 검색

이 접근 방식을 확장하여 각 개별 판매자의 최신 행을 검색하려면 더욱 발전된 전략이 필요합니다. 다음 SQL 쿼리는 이 작업을 수행합니다.

<code class="sql">select s.*
from snapshot s
left join snapshot s1 on s.seller_id = s1.seller_id
and s.created_at < s1.created_at
where s1.seller_id is null

이 쿼리에서 하위 쿼리 s1은 s.created_at < s1.created_at - 후속 행에 나중에 생성된_at 타임스탬프가 있는 레코드만 포함되도록 합니다. 그런 다음 외부 쿼리는 하위 쿼리에 일치하는 행이 없는 기본 테이블의 모든 행을 선택하여 각 Seller_id에 대한 최신 레코드를 효과적으로 격리합니다.

Laravel Eloquent에서 쿼리 구현

Laravel Eloquent를 사용하여 이 쿼리를 구현하려면 쿼리 빌더 방법을 활용할 수 있습니다.

<code class="php">DB::table('snapshot as s')
  ->select('s.*')
  ->leftJoin('snapshot as s1', function ($join) {
        $join->on('s.seller_id', '=', 's1.seller_id')
             ->whereRaw(DB::raw('s.created_at < s1.created_at'));
   })
  ->whereNull('s1.seller_id')
  ->get();</code>

이 쿼리는 스냅샷 테이블과 하위 쿼리 간에 왼쪽 조인을 수행하여 SQL 쿼리의 기능을 복제합니다. (s1)은 각 Seller_id에 대한 이후 행을 식별합니다. whereNull 조건은 후속 행이 있는 행을 필터링하여 각 Seller_id에 대한 최신 레코드만 남깁니다. 이 쿼리를 실행하면 테이블의 각 고유 판매자에 대한 가장 최근 판매 컬렉션이 반환됩니다.

위 내용은 Laravel Eloquent를 사용하여 테이블의 각 고유 판매자에 대한 최신 행을 어떻게 검색할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.