Laravel Eloquent : all ()의 순서 결과


214

나는 간단한 작업에 갇혀있다. 이 전화에서 오는 결과를 주문하면됩니다

$results = Project::all();

Project모델은 어디에 있습니까 ? 나는 이것을 시도했다

$results = Project::all()->orderBy("name");

그러나 작동하지 않았습니다. 테이블에서 모든 데이터를 가져 와서 주문하는 가장 좋은 방법은 무엇입니까?

답변:



114

객체 컬렉션을 반환하므로 all ()을 계속 사용하려는 경우 orderBy (쿼리 수준) 대신 sortBy (컬렉션 수준)를 계속 사용할 수 있습니다.

오름차순

$results = Project::all()->sortBy("name");

내림차순

$results = Project::all()->sortByDesc("name");

자세한 내용은 컬렉션 관련 설명서를 확인하십시오.

https://laravel.com/docs/5.1/collections


정확히 내가 찾던 것. 이것을 광범위하게 사용 orderBy하면 쿼리 수준에서의 사용 에 비해 단점이 있습니까?
Giedrius

1
\ @foreach ($ posts-> sortByDesc ( 'created_at') $ post) \ @include ( 'posts.post') \ @endforeach
sdexp

2
나는 이것이 어떻게 배후에서 작동하는지 알고 싶습니다. sortBy()Laravel Engine (PHP) 내부 에서 컬렉션을 정렬하는 것처럼 orderBy()데이터베이스에 수행 되는 것처럼 컬렉션을 정렬하는 것처럼 보입니다 . 거의 모든 가능한 상황에서 데이터베이스가 더 빨라질 것이며 데이터 집합이 증가함에 따라 성능의 불일치도 커질 것입니다. 나는 이것에 대한 다른 사람들의 생각을 듣고 싶습니다.
cartbeforehorse

3
@cartbeforehorse 어떤 메소드가 무엇을 리턴하는지 알아야합니다. :: all ()은 아마도 후드 아래에서-> get ()을 호출하여 컬렉션을 반환합니다. sortBy ()는 콜렉션의 메소드이므로, PHP 측에서 발생합니다 (쿼리 오브젝트에서 호출되는 orderBy ()와 반대). :: all ()을 사용하는 것은 좋지 않습니다. PHP로 정렬하는 것은 물론입니다. :: all ()이 수백만 개의 객체가있는 컬렉션을 반환한다고 가정 해보십시오. 가져 오는 데 너무 오래 걸리고 PHP로 정렬하는 데 더 많은 시간이 걸립니다. 물론, 소량의 객체 (컬렉션) 만 반환한다는 것을 확신한다면 :: all ()을 사용할 수 있습니다.
Avram

왜 이것이 대답이 아닌가? all () 함수와 함께 작동했습니다.
VishalParkash

36

또한 이전 답변을 강화하기 위해 두 번째 매개 변수로 하나를 추가하여 내림차순 desc또는 오름차순으로 정렬 할 수도 있습니다 asc.

$results = Project::orderBy('created_at', 'desc')->get();

14

2017 년 업데이트


Laravel 5.4는 orderByDesc () 메소드를 쿼리 빌더에 추가했습니다.

$results = Project::orderByDesc('name')->get();

10

desc로 날짜에 대한 결과가 필요한 동안

$results = Project::latest('created_at')->get();

9

이 작업을 수행:

$results = Project::orderBy('name')->get();

이 작업을 수행하지 마십시오 :

$results = Project::all()->sortBy('name');

왜? 간단히 말해서, 첫 번째 방법은 두 번째 방법보다 빠릅니다.


3
이유를 추가하는 것이 좋을 것입니다. 첫 번째 접근 방식은 데이터베이스 (쿼리) 수준에서 거의 항상 가장 효율적인 순서로 정렬 합니다. 나는 항상 모델 접근 방식을 사용한다고 말하고 싶습니다. 두 번째 접근 방식이 필요할 때 알 것입니다 :)
jave.web


4

참고 :

$results = Project::select('name')->orderBy('name')->get();

다음과 같은 쿼리가 생성됩니다.

"SELECT name FROM proyect ORDER BY 'name' ASC"

DB가 최적화되지 않고 쿼리가 더 복잡하고 finish SQL에서 ORDER BY 생성을 방지해야하는 일부 앱에서는 다음을 수행 할 수 있습니다.

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();

이제 결과를 주문하는 PHP입니다.


0

기록을 가져오고 주문하기 때문에 전화를 받으려면 지시가 필요합니다.

$results = Project::orderBy('name')
           ->get();

예:

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();

이 예에서 데이터는 "where"로 필터링되고 20보다 큰 레코드를 가져오고 orderBy 카탈로그를 높은 순서에서 낮은 순서로 가져옵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.