[Laravel] 소프트 델리트 및 취득, 복원, 완전 삭제

물리적 삭제 및 논리 삭제



데이터베이스 삭제에는 물리적 삭제와 논리 삭제가 있습니다. 말은 아무래도 좋습니다만, 2개에는 큰 차이가 있습니다.
그것은 복원 가능한지 여부입니다.
이 복원 가능한 삭제, 소위 휴지통에 들어있는 상태로 하는 삭제 방법이 논리 삭제로 소프트 델리트가 됩니다.

우선 데이터베이스 만들기



데이터베이스를 만들어 갑시다.
php artisan make:migration create_contents_table --create=contents

여기서는 contents 테이블을 만들고 있습니다.

create_contents_table.php
    public function up()
    {
        Schema::create('contents', function (Blueprint $table) {
            $table->increments('id');
            $table->text('body');
            $table->timestamps();

            $table->softDeletes();
        });
    }

text 데이터 형식으로 body 열을 만드는 간단한 데이터베이스입니다.
마지막 $table->softDeletes();가 포인트입니다.
이 테이블의 요소에 삭제 처리를 할 때는 소프트 델리트라고 정의하고 있습니다.

부수적인 모델 만들기



그런 다음 데이터베이스와 관련된 모델을 만듭니다.
php artisan make:model Content

Content.php
use Illuminate\Database\Eloquent\SoftDeletes;

class Content extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at'];

    protected $fillable = [
        'body'
    ];
}

모델에서는, $fillable 로 body를 만지도록(듯이) 설정하고 있습니다.use SoftDeletes에서 소프트 델리트를 사용할 수 있도록하고 있으며 삭제 된 날을 알 수 있도록 $dates에서 deleted_at 열을 만들고 있습니다.

여기까지 할 수 있으면 migrate 합시다.
php artisan migrate

내용이 비어 있으므로 데이터 넣기



현재는 내용이 비어 있으므로 적당하게 데이터를 3개 정도 넣어 봅시다.

web.php

use App\Content;

Route::get('/contents/insert', function() {
    Content::create([
        'body' => 'Laravel is PHP framework!!',
    ]);
});

Route::get('/contents/insert2', function() {
    Content::create([
        'body' => 'PHP is programming language!!',
    ]);
});

Route::get('/contents/insert3', function() {
    Content::create([
        'body' => 'programming is a lot of fun!!',
    ]);
});

이제 지정된 URL에 액세스하면 데이터가 들어갑니다.



갈거야. deleted_at는 현재 NULL입니다.

소프트 델리트와 취득



본제의 소프트 델리트를 해 봅시다.

web.php
Route::get('/contents/softdelete', function() {
    Content::find(1)->delete();
});

id가 1인 요소를 삭제합니다.



갔다. 삭제한 날이 표시되고 데이터베이스에는 있지만 검색할 수 없습니다.

다음은 삭제한 요소를 가져옵니다.

web.php
Route::get('/contents/softdelete/get', function() {
    $content = Content::onlyTrashed()->whereNotNull('id')->get();

    dd($content);
});



갈거야.

다른 방법도 소개


onlyTrashed() 는 삭제된 요소만 검색하는 메서드이지만 다른 메서드도 있습니다.
또 완전 삭제나, 복원의 메소드도 소개합니다.
//削除済みのデータも含める
Content::withTrashed()->whereNotNull('id')->get();

//完全削除
Content::onlyTrashed()->whereNotNull('id')->forceDelete();

//復元
Content::onlyTrashed()->whereNotNull('id')->restore();


요약



빨리 laravel을 잘 사용할 수있게되고 싶습니다. . .

좋은 웹페이지 즐겨찾기