Eloquent 서브쿼리 향상 - 라라벨
7019 단어 phpwebdevlaravelprogramming
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();
쿼리 작성기의 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');
몇 가지 기본 사항을 제시하려고 했지만 더 깊이 들어가려면 출처를 방문하십시오.
저와 함께 즐거우셨기를 바라며, 새로운 것을 찾는 여러분을 존경합니다.
Reference
이 문제에 관하여(Eloquent 서브쿼리 향상 - 라라벨), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/morcosgad/eloquent-subquery-enhancements-laravel-36mo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)