Laravel에서 Eloquent(Select)를 사용하여 데이터베이스를 조회하는 방법

Laravel에서 Eloquent(Select)를 사용하여 데이터베이스를 조회하는 방법

2022-05-31 last update

29 minutes reading Databases PHP Frameworks PHP Laravel
이 시리즈의 모든 부분을 주목하고 있다면, 링크 목록을 포함하기 위해 응용 프로그램의 데이터베이스와 명령을 업그레이드해야 합니다.
응용 프로그램의 주 경로는 현재 데이터베이스에 있는 모든 링크를 표시하고 목록에 대한 정보가 없습니다.이 섹션에서는 새 아키텍처를 반영하기 위해 기본 프런트엔드 뷰를 업데이트합니다.
ORM 시스템을 사용하는 가장 큰 장점 중 하나는 데이터베이스 테이블의 줄을 코드 라이브러리의 대상으로 조작할 수 있다는 것이다.Eloquent는 SQL 문장을 작성하지 않고 데이터베이스를 조회하고 결과를 필터링하는 데 사용할 수 있는 몇 가지 방법을 제공합니다.표에서 모든 행에 대한 일반적인 쿼리 SELECT (순수 SQL에서와 유사 SELECT * FROM links 는 다음 코드를 통해 설명할 수 있습니다.
$links = Link::all();
결과 집합은 Eloquent Collection로 되돌아옵니다. 이것은 iterable 대상입니다. 그 행위는 수조와 유사하지만 맵/감소 방법, 필요할 때만'수합'(새로운 데이터로 끌어들임) 인용 대상의 능력을 제공합니다. 이것은 데이터베이스와 상호작용할 때 전체적인 성능을 향상시키는 데 도움이 됩니다.

색인 라우팅 업데이트


인덱스 루트를 정의하는 주 응용 프로그램 루트 파일을 확인하면 현재 응용 프로그램 코드가 Link::all() 를 사용하여 모든 링크를 조회하는 것을 알 수 있습니다.코드 편집기에서 파일 열기 routes/web.php:
routes/web.php
다음은 현재 이 파일의 라우팅 방법입니다.
라우팅/네트워크.php
Route::get('/', function () {
    $links = Link::all()->sortDesc();
    return view('index', [
        'links' => $links
    ]);
});
말 그대로 / 방법은 마지막부터 1등까지의 내림차순으로 결과를 배열하는 데 쓰인다.이것은 SQL 조회의 sortDesc() 자구와 다르다. 왜냐하면 ORDER BY 방법은 코드 단계에서 작동하기 때문에 collection 순서를 다시 정렬하기 때문이다.이 방법은 이 시리즈의 다음 절에서 정렬 결과를 상세하게 토론할 것이기 때문에 무시할 수 있습니다.
현재 데이터베이스에 등록된 모든 목록의 집합을 가져오기 위해 이 코드를 편집합니다. 나중에 전방 보기에서 모든 목록 이름을 표시할 수 있도록 합니다.
우선, 파일의 시작에는 sortDesc 성명, 인용 use 모델이 포함되어 있다.이 성명은 이 클래스를 인용할 때마다 전체 클래스 이름을 입력할 필요가 없도록 하는 데 사용됩니다.
라우팅/네트워크.php
<?php
 
use Illuminate\Support\Facades\Route;
use App\Models\Link;
use App\Models\LinkList;
...
그런 다음 등록된 모든 목록을 포함하는 LinkList 변수를 포함하도록 주 경로 정의 return 를 변경합니다.
라우팅/네트워크.php
return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
이것이 바로 완성된 파일의 외관이다.강조 표시된 변경 사항을 주의하십시오.
라우팅/네트워크.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()
    ]);
});
 
파일을 업데이트한 후에 저장하는 것을 잊지 마세요.

색인 뷰 업데이트


목록에 대한 정보를 동시에 제공하기 위해 주관선을 업데이트하면 참조된 보기 파일을 편집할 수 있습니다.코드 편집기에서 파일 열기 lists:
resources/views/index.blade.php
이 파일은 프로그램이 메인 색인 페이지에서 사용하는 단일 프런트엔드 보기 파일을 포함합니다.이 파일에서 resources/views/index.blade.php 변수에서 순환하는 @foreach 칼날 블록을 찾습니다.다음과 같이 표시됩니다.
리소스/보기/색인.칼날php
...
            @foreach ($links as $link)
                <div class="box link">
                    <h3><a href="{{ $link->url }}" target="_blank" title="Visit Link: {{ $link->url }}">{{ $link->description }}</a></h3>
                    <p>{{$link->url}}</p>
                </div>
            @endforeach
...
순환 중인 코드는 목록에 대한 정보를 포함하지 않습니다.링크를 저장하는 목록 제목이 있는 링크 URL 뒤에 새 줄이 추가됩니다.Bulma$links CSS 클래스를 사용하여 이 정보를 태그 스타일로 설정할 수 있습니다.
리소스/보기/색인.칼날php
<p>{{$link->url}}</p>
<p class="mt-2"><a href="#" title="{{ $list->title }}" class="tag is-info">{{ $link->link_list->title }}</a></p>
강조 표시된 행을 파일에 추가합니다.나중에 이 시리즈의 다음 부분에서 단일 목록 페이지를 설정하면 링크가 조정됩니다.
다음은 클래스 tag 를 포함하는 단락을 찾습니다. 이 클래스는 subtitle 표시된 다음에 링크를 포함하는 부분 앞에 있습니다.이 영역에서 사용된 일반 텍스트를 링크 목록 기반 메뉴로 대체합니다. 이전에 <h1> 에서 기본 파이프라인을 편집할 때 lists 변수에서 사용할 수 있습니다.
부제목 섹션의 텍스트를 강조 표시된 내용으로 대체하려면 다음과 같이 하십시오.
리소스/보기/색인.칼날php
 
        <p class="subtitle">
            @foreach ($lists as $list)<a href="#" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }}</a> @endforeach
        </p>
목록 탭의 스타일은 이전과 약간 다르다. 각 탭의 색을 반전시키기 위해 매우 가벼운 CSS 클래스를 추가했다.
편집이 완료된 파일의 모양입니다.강조 표시된 행 표현 변경:
리소스/보기/색인.칼날php
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>My Awesome Links</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
 
    <style>
        html {
            background: url("https://i.imgur.com/BWIdYTM.jpeg") no-repeat center center fixed;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            -o-background-size: cover;
            background-size: cover;
        }
 
        div.link h3 {
            font-size: large;
        }
 
        div.link p {
            font-size: small;
            color: #718096;
        }
    </style>
</head>
<body>
<section class="section">
    <div class="container">
        <h1 class="title">
            Check out my awesome links
        </h1>
        <p class="subtitle">
            @foreach ($lists as $list)<a href="#" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }}</a> @endforeach
        </p>
 
        <section class="links">
            @foreach ($links as $link)
                <div class="box link">
                    <h3><a href="{{ $link->url }}" target="_blank" title="Visit Link: {{ $link->url }}">{{ $link->description }}</a></h3>
                    <p>{{$link->url}}</p>
                    <p class="mt-2"><a href="#" title="{{ $list->title }}" class="tag is-info">{{ $link->link_list->title }}</a></p>
                </div>
            @endforeach
        </section>
    </div>
</section>
</body>
</html>
 
완료되면 파일을 저장합니다.홈 프런트엔드 보기에 링크 목록에 대한 업데이트 정보가 표시됩니다.
원하는 경우 현재 routes/web.php Artisan 명령을 사용하여 새 링크를 포함하고 업데이트된 애플리케이션을 테스트할 수 있습니다.
  1. docker-compose exec app php artisan link:new
[secondary_label Output
Link URL:
> https://laravel.com/docs/8.x/
 
Link Description:
> Laravel Docs
 
Link List (leave blank to use default):
> laravel
 
New Link:
https://laravel.com/docs/8.x/ - Laravel Docs
Listed in: laravel
 
Is this information correct? (yes/no) [no]:
> yes
 
Saved.
그런 다음 브라우저에서 응용 프로그램 페이지를 다시 로드합니다.제공된 Docker Compose 설정을 사용하는 경우 응용 프로그램은 다음 로컬 주소에 있어야 합니다.
http://localhost:8000
다음과 같은 페이지를 얻을 수 있습니다.

이 시리즈의 다음 부분에서 당신은 링크 목록에 각 페이지를 설정하고 index.blade.php 방법으로 데이터베이스를 조회하여 더욱 세밀한 결과를 얻는 방법을 배울 것입니다.