Laravel의 데이터베이스 기록을 관리하기 위해 Artisan 명령을 만드는 방법

Laravel의 데이터베이스 기록을 관리하기 위해 Artisan 명령을 만드는 방법

2022-05-31 last update

37 minutes reading PHP Laravel Databases PHP Frameworks
만약 이 시리즈를 계속 따른다면, 데이터베이스 테이블은 이미 모두 설정되어 있을 것입니다.그러나 사용자가 links 테이블에 새 항목을 삽입할 수 있도록 하는 방법이 필요합니다.
이 시리즈의 범위를 제한하고 응용 프로그램의 기능을 모두 갖추려면 Artisan 명령을 설정하여 데이터베이스에 있는 링크를 만들고 삭제합니다.Artisan은 Laravel에 첨부된 명령행 도구로 많은 실용 프로그램을 제공하여 개발 과정을 가속화시켰다. 샘플 코드 생성부터 응용 프로그램의 데이터베이스 삭제와 재생성까지.
명령줄 인터페이스 관리 프로그램을 사용하면 웹 폼과 보안 구역을 대체할 수 있습니다. 브라우저를 통해 검증하지 않고 서버에 로그인해야만 이러한 명령을 실행할 수 있기 때문입니다.나중에 응용 프로그램에 보안 영역을 만들기로 결정하면 웹 폼을 만들어서 사용자가 데이터베이스에 제출할 수 있는 새로운 링크를 만들 수 있습니다.
Artisan 명령은 일반적으로 백그라운드에서 실행해야 하는 응용 프로그램 작업을 수행하는 데 사용되며, 수동으로 실행할 수도 있고, Crontab 등 스케줄링 메커니즘을 통해 자동으로 실행할 수도 있다.권한을 부여받은 사용자의 입력에 따라 동적 설정이 필요한 새로운 응용 프로그램 기능의 원형을 만드는 데 사용할 수 있습니다.
시작하려면 보조 객체를 사용하여 새 Artisan 명령을 만듭니다.
  1. docker-compose exec app php artisan make:command LinkNew
Output
Console command created successfully.
이것은 make:command 디렉터리에 있는 LinkNew.php 라는 파일을 만들 것입니다.app/Console/Commands 부류에서 확장된 이 클래스에서 Illuminate\Console\Command 방법을 실행해야 합니다. 이 방법은 이 명령을 호출할 때 실행됩니다.명령의 서명을 정의하려면 handleprotected 속성을 $signature로 설정합니다.
선택한 텍스트 또는 코드 편집기를 사용하여 새 파일을 엽니다.여기에서 사용link:new:
  1. nano app/Console/Commands/LinkNew.php
nano 방법에서 데이터베이스에 새 링크를 저장할 수 있도록 다른 작업을 해야 합니다.먼저 링크 URL을 가져오려면 prompt for the user’s input 이 필요합니다.
 $url = $this->ask('Link URL:');
그런 다음 함수를 사용하여 사용자로부터 입력한 URL이 유효한지 확인합니다.링크가 올바르지 않으면 오류를 표시하고 프로그램을 종료합니다. 상태 코드는 handle 입니다. 이것은 프로그램 오류가 종료됨을 의미합니다.
        if (!filter_var($url, FILTER_VALIDATE_URL)) {
            $this->error("Invalid URL. Exiting...");
            return 1;
        }
링크가 유효하면 이전과 같은 방법으로 링크 설명을 요청합니다.
 $description = $this->ask('Link Description:');
그리고 confirm 조수를 사용하여 모든 데이터가 정확한지 최종적으로 확인해 달라고 요청할 것입니다.사용자가 확인하면 링크는 최종적으로 데이터베이스에 삽입됩니다.이 시리즈의 앞부분에서 만든 filter_var 웅변적인 모델을 사용하여 데이터베이스와 상호작용을 할 것입니다.
        $this->info("New Link:");
        $this->info($url . ' - ' . $description);

        if ($this->confirm('Is this information correct?')) {
            $link = new Link();
            $link->url = $url;
            $link->description = $description;
            $link->save();

            $this->info("Saved.");
        }
응용 프로그램이 1로 종료되어 성공 상태 (0 개의 오류) 를 나타냅니다.
return 0;
다음 코드는 이 절차의 완전한 실현을 포함한다.Link 클래스의 현재 컨텐트를 다음으로 바꿉니다.
응용 프로그램/콘솔/명령/링크 새로 만들기.php
<?php

namespace App\Console\Commands;

use App\Models\Link;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class LinkNew extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'link:new';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a New Link';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $url = $this->ask('Link URL:');

        if (!filter_var($url, FILTER_VALIDATE_URL)) {
            $this->error("Invalid URL. Exiting...");
            return 1;
        }

        $description = $this->ask('Link Description:');

        $this->info("New Link:");
        $this->info($url . ' - ' . $description);

        if ($this->confirm('Is this information correct?')) {
            $link = new Link();
            $link->url = $url;
            $link->description = $description;
            $link->save();

            $this->info("Saved.");
        }

        return 0;
    }
}
완료되면 파일을 저장하고 닫습니다.
이 명령을 실행하고 데이터베이스에 새 링크를 삽입하려면 다음을 실행하십시오.
  1. docker-compose exec app php artisan link:new
Output
Link URL:: > https:///community Link Description:: > DigitalOcean Community New Link: https:///community - DigitalOcean Community Is this information correct? (yes/no) [no]: > yes Saved.
원한다면 링크를 마음대로 추가할 수 있습니다.

링크 나열 중


다음은 모든 링크의 목록을 표시하는 새로운 Artisan 명령을 만들어야 합니다.너는 그것을 0 라고 불러도 된다.다음 명령을 사용하여 새 명령을 생성합니다.
  1. docker-compose exec app php artisan make:command LinkList
선택한 텍스트 또는 코드 편집기를 사용하여 명령 클래스를 엽니다.
  1. nano app/Console/Commands/LinkList.php
이 명령의 LinkNew 방법에서 link:list 표의 모든 줄을 조회합니다.handle 모델을 사용하여 Eloquent가 제공하는 하단database query methods에 액세스할 수 있습니다.명령줄에 결과를 잘 표시하려면 table 출력 도움말을 사용하십시오.
        $headers = [ 'id', 'url', 'description' ];
        $links = Link::all(['id', 'url', 'description'])->toArray();
        $this->table($headers, $links);

        return 0;
다음 코드는 links 명령의 완전한 실현을 포함한다.Link 파일의 내용을 다음으로 대체합니다.
응용 프로그램/콘솔/명령/링크 목록입니다.php
<?php

namespace App\Console\Commands;

use App\Models\Link;
use Illuminate\Console\Command;

class LinkList extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'link:list';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'List links saved in the database';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $headers = [ 'id', 'url', 'description' ];
        $links = Link::all(['id', 'url', 'description'])->toArray();
        $this->table($headers, $links);

        return 0;
    }
}
완료되면 파일을 저장하고 닫습니다.
이 명령을 실행하고 테이블에 삽입된 모든 링크의 목록을 표시하려면 다음을 실행하십시오.
  1. docker-compose exec app php artisan link:list
Output
+----+------------------------------------+--------------+ | id | url | description | +----+------------------------------------+--------------+ | 1 | https:///community | DO Community | | 2 | https://laravel.com | Laravel | +----+------------------------------------+--------------+

링크 삭제


마지막으로 링크를 삭제하는 명령을 생성합니다.
  1. docker-compose exec app php artisan make:command LinkDelete
Output
Console command created successfully.
선택한 텍스트 또는 코드 편집기를 사용하여 새 파일을 엽니다.
  1. nano app/Console/Commands/LinkDelete.php
이 명령의 이름을 link:list 로 지정할 수 있습니다.어떤 링크를 삭제해야 하는지 알고 싶으면 명령을 호출할 때 링크의 ID를 추가하는 매개 변수를 제공해야 합니다.이것 또한 LinkList.php 변수에 설정된 변수 defines how your command is called 와 어떤 매개 변수 (강제 또는 비강제) 를 제공해야 하는지:
protected $signature = 'link:delete {link_id}';
이 명령의 links 방법은 서로 다른 명령을 실현할 것이다.우선, 명령 호출에서 제공해야 할 링크 ID를 얻을 수 있습니다.
$link_id = $this->argument('link_id');
그리고 link:delete모델이 제공하는 웅변 방법$signature을 사용하여 데이터베이스에서 인용된 링크를 얻습니다.
$link = Link::find($link_id);
handle 메서드에서 ID가 있는 데이터베이스 레코드를 찾을 수 없으면 find 메서드가 반환됩니다.이 변수가 Link 변수에 포함된 현재 값인지 확인하고 오류를 되돌려줍니다.프로그램이 오류를 종료합니다 (코드 1).
        if ($link === null) {
            $this->error("Invalid or non-existent link ID.");
            return 1;
        }
findnull이 아닐 때 명령은 계속 실행됩니다.그리고 null 조수를 사용하여 사용자에게 확인을 요청합니다.
if ($this->confirm('Are you sure you want to delete this link? ' . $link->url)) {
    // deletes link
}
사용자가 입력$link을 통해 클릭$link을 통해 조작을 확인하면 confirm 웅변 모델에서 yes 방법으로 데이터베이스에서 지정한 링크를 삭제합니다.
            $link->delete();
            $this->info("Link deleted.");
다음 코드는 ENTER 명령의 완전한 실현을 포함한다.delete 파일의 내용을 다음과 같이 대체합니다.
응용 프로그램/콘솔/명령/링크 삭제.php
<?php

namespace App\Console\Commands;

use App\Models\Link;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class LinkDelete extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'link:delete {link_id}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Deletes a link from the database.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $link_id = $this->argument('link_id');
        $link = Link::find($link_id);

        if ($link === null) {
            $this->error("Invalid or non-existent link ID.");
            return 1;
        }

        if ($this->confirm('Are you sure you want to delete this link? ' . $link->url)) {
            $link->delete();
            $this->info("Link deleted.");
        }

        return 0;
    }
}
완료되면 파일을 저장하고 닫습니다.
현재, 링크 테이블에서 링크를 삭제하려면 먼저 Link 를 사용하여 링크의 ID를 받아야 합니다. 앞에서 말한 바와 같이.링크 ID를 알고 나면 다음 명령을 사용하여 실행할 수 있습니다list:delete.
  1. docker-compose exec app php artisan link:delete LINK_ID
Output
Are you sure you want to delete this link? https://laravel.com (yes/no) [no]: > yes Link deleted.
이제 명령줄 인터페이스에서 실행되는 Artisan 명령을 사용하여 응용 프로그램 데이터베이스에 링크를 삽입, 나열 및 삭제할 수 있습니다.이 시리즈의 다음 섹션에서는 Blade 템플릿과 Bulma CSS 프레임워크를 사용하여 응용 프로그램의 전면을 설정합니다.