Laravel Eloquent에서 질의 결과를 정렬하는 방법

Laravel Eloquent에서 질의 결과를 정렬하는 방법

2022-05-31 last update

18 minutes reading Databases PHP Frameworks PHP Laravel
본 시리즈previous part에서 당신은 어떻게 all() 방법을 사용하여 웅변의 모델에서 데이터베이스 기록을 얻는지 배웠습니다.기록을 정렬하는 데 사용되는 sortDesc() 방법을 기억하고 있을 수도 있습니다.sortDesc() 방법은 Collection 클래스의 일부입니다. 이것은 기능이 강한 Laravel 실용 프로그램 클래스입니다. 이것은 본 컴퓨터의 PHP 수조의 개선 버전입니다.이 방법은 마지막 항목이 집합에서 먼저 나타나도록 데이터베이스 조회 자체에서 결과를 정렬하는 것이 아니라 집합의 순서를 반전시킨다.이것은 비교적 작은 결과 집합에 효과가 있지만 데이터베이스 조회 자체에서 결과를 정렬하는 것과 같은 유연성을 제공하지 않는다.
데이터베이스 조회의 결과를 정렬하려면 orderBy() 방법을 사용하고 정렬 조건으로 사용할 표 필드를 제공해야 한다.이것은 데이터베이스에서 필요한 결과만 얻을 수 있는 조회를 더욱 유연하게 구축할 수 있습니다.
현재 routes/web.php 파일의 코드를 변경하여 created_at 테이블 필드에 따라 최신에서 최신으로 정렬된 결과를 표시합니다.
테이블 마이그레이션에 created_at 정의가 포함되어 있을 때 updated_attimestamps() 필드는 Eloquent에서 관리됩니다.이 필드를 수동으로 업데이트해서는 안 되지만, 검색을 정렬하고 선별할 수 있습니다.
코드 편집기에서 이 파일을 열려면 다음과 같이 하십시오.
routes/web.php
코드는 다음과 같습니다.
라우팅/네트워크.php
<?php
 
use Illuminate\Support\Facades\Route;
use App\Models\Link;
use App\Models\LinkList;
 
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
 
Route::get('/', function () {
    $links = Link::all()->sortDesc();
    return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
});
 
Route::get('/{slug}', function ($slug) {
    $list = LinkList::where('slug', $slug)->first();
    if (!$list) {
        abort(404);
    }
 
    return view('index', [
        'list' => $list,
        'links' => $list->links,
        'lists' => LinkList::all()
    ]);
})->name('link-list');
 
/{slug} 루트는 slug에 따라 링크를 표시하는 것을 책임지고 있으며, 현재 어떠한 정렬 방법도 사용하지 않습니다.list 모델에 정의된 관계를 사용하여 코드에 강조 표시된 LinkList 변수를 통해 링크를 얻습니다.
현재 목록에 여러 개의 링크를 추가하면 기본적으로 검색은 최신에서 최신으로 되돌아옵니다.sortDesc() 방법을 사용하여 $list->links 호출에서 집합을 다시 정렬할 수 있지만, orderBy() 방법을 사용하면 더욱 유연성을 제공할 수 있으며, 이후에 다른 선별 조건을 포함할 수 있습니다.where() 링크를 호출하여 보다 세밀한 결과를 얻을 수 있습니다.
이전 코드 예제에서 강조 표시된 행을 다음 행으로 대체합니다.
라우팅/네트워크.php
'links' => $list->links()->orderBy('created_at', 'desc')->get(),
이번에 우리는 호출 $list->links() 방법을 통해 내장 검색 생성기를 호출합니다. 이 방법은 LinkList 클래스에 정의된 관계 방법을 인용합니다.이것은 $list->links를 클래스 속성 호출(괄호 없음)으로 하는 것과 달리 후자는 모델의 마술 방법을 호출하여 이 목록과 관련된 모든 링크를 얻는다.
완료되면 전체 routes/web.php 파일의 모양은 다음과 같습니다.
라우팅/네트워크.php
<?php

use Illuminate\Support\Facades\Route;
use App\Models\Link;
use App\Models\LinkList;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    $links = Link::all()->sortDesc();
    return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
});

Route::get('/{slug}', function ($slug) {
    $list = LinkList::where('slug', $slug)->first();
    if (!$list) {
        abort(404);
    }

    return view('index', [
        'list' => $list,
        'links' => $list->links()->orderBy('created_at', 'desc')->get(),
        'lists' => LinkList::all()
    ]);
})->name('link-list');

파일을 저장하고 닫습니다.이제 link:new Artisan 명령을 사용하여 두 개의 새 링크를 추가합니다.기본 목록을 사용할 수 있습니다.
  1. docker-compose exec app php artisan link:new
Output
Link URL: > https://laravel.com/docs/8.x/eloquent Link Description: > Laravel Eloquent Docs Link List (leave blank to use default): > New Link: https://laravel.com/docs/8.x/eloquent - Laravel Eloquent Docs Listed in: default Is this information correct? (yes/no) [no]: > yes Saved.
기본 링크 목록 페이지를 다시 로드하면 최신 링크에서 최신 링크로 이동해야 합니다.
http://localhost:8000/default

마찬가지로 링크에 설명된 알파벳순으로 링크를 배열하려면 다음과 같이 메서드 호출에 사용할 줄을 변경해야 합니다.
'links' => $list->links()->orderBy('description', 'asc')->get(),
이것은 변경된 링크의 정렬 방식입니다.

이 시리즈의 다음 부분에서, 당신은 라벨의 웅변적인 조회에서 총 결과 계수를 얻는 방법을 배울 것입니다.