Eloquent 서브쿼리 향상 - 라라벨

나는 2019년에 이 훌륭한 오래된 기사https://laravel-news.com/eloquent-subquery-enhancements를 찾았고 여기에는 데이터베이스를 다루는 데 도움이 되고 미래의 아이디어를 보다 유연하게 만들어주는 매우 중요한 Eloquent Subquery가 포함되어 있습니다.
  • "선택"하위 쿼리

  • Laravel 6.0의 새로운 하위 쿼리 선택 기능을 사용하여 단일 쿼리를 사용하여 가장 최근에 해당 목적지에 도착한 항공편의 이름과 모든 목적지를 선택할 수 있습니다.

    return Destination::addSelect(['last_flight' => Flight::select('name')
        ->whereColumn('destination_id', 'destinations.id')
        ->orderBy('arrived_at', 'desc')
        ->limit(1)
    ])->get();
    


    여기에서 Eloquent를 사용하여 하위 쿼리를 생성하는 방법에 주목하십시오. 이것은 훌륭하고 표현력이 풍부한 구문을 만듭니다. 즉, 쿼리 빌드를 사용하여 이 작업을 수행할 수도 있습니다.

    return Destination::addSelect(['last_flight' => function ($query) {
        $query->select('name')
            ->from('flights')
            ->whereColumn('destination_id', 'destinations.id')
            ->orderBy('arrived_at', 'desc')
            ->limit(1);
    }])->get();
    


  • "Order by"하위 쿼리

  • 쿼리 작성기의 orderBy() 메서드에서 하위 쿼리를 사용합니다. 위의 예를 계속해서 사용하여 마지막 항공편이 해당 목적지에 도착한 시간을 기준으로 목적지를 정렬할 수 있습니다.

    return Destination::orderByDesc(
        Flight::select('arrived_at')
            ->whereColumn('destination_id', 'destinations.id')
            ->orderBy('arrived_at', 'desc')
            ->limit(1)
    )->get();
    


    선택과 마찬가지로 쿼리 작성기를 직접 사용하여 하위 쿼리를 만들 수도 있습니다. 예를 들어 마지막 로그인 날짜를 기준으로 사용자를 주문할 수 있습니다.

    return User::orderBy(function ($query) {
        $query->select('created_at')
            ->from('logins')
            ->whereColumn('user_id', 'users.id')
            ->latest()
            ->limit(1);
    })->get();
    


  • "시작"하위 쿼리

  • 예를 들어 애플리케이션에서 사용자의 평균 총 기부금을 계산하고 싶을 수 있습니다. 그러나 SQL에서는 집계 함수를 중첩할 수 없습니다AVG(SUM(amount)).
    대신 from 하위 쿼리를 사용하여 이를 계산할 수 있습니다.

    return DB::table(function ($query) {
        $query->selectRaw('sum(amount) as total')
            ->from('donations')
            ->groupBy('user_id');
    }, 'donations')->avg('total');
    


    몇 가지 기본 사항을 제시하려고 했지만 더 깊이 들어가려면 출처를 방문하십시오.
    저와 함께 즐거우셨기를 바라며, 새로운 것을 찾는 여러분을 존경합니다.

    좋은 웹페이지 즐겨찾기