카테고리 없음

laravel 라라벨 소프트 딜리트 적용

백위한 2024. 5. 9. 20:45

데이터베이스에서 레코드를 실제로 삭제하는 대신 Eloquent는 soft delete할 수 있다.

모델이 소프트 딜리트되면 실제로 데이트베이스에서 제거되지 않는다.

대신 모델이 삭제된 날짜와 시간을 나타내는 deleted_at 속성이 모델에 설정된다.

 

모델에 대해 소프트 딜리트를 사용하려면 모델에 Illuminate\Database\Eloquent\SoftDeletes 속성을 추가한다.

$dates 배열에 'deleted_at' 칼럼을 추가한다.

 

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
 
class Flight extends Model
{
    use SoftDeletes;
    
    protected $dates = ['deleted_at'];
}

 

$dates는 Laravel Eloquent 모델에서 날짜로 취급되는 속성들을 정의한다.

이 배열은 모델에서 날짜 형식의 필드를 처리하기 위한 기능을 제공한다.

 

기본적으로 Eloquent는 모델의 해당 데이터베이스 테이블에 created_at과 updated_at 칼럼이 존재할 것으로 예상한다.

모델이 생성되거나 업데이트될 때 이 열 값이 자동으로 설정된다.

Eloquent는 해당 속성을 날짜로 처리한다.

 

모델에서 사용자 정의 날짜 필드를 가질 수 있다.

이러한 사용자 정의 날짜 필드는 '$dates' 배열에 추가된다.

 

터미널을 열어 deleted_at 칼럼을 추가할 파일을 생성한다.

php artisan make:migration add_deleted_at_to_'테이블명'_table

php artisan make:migration add_deleted_at_to_boards_table

 

마이그레이션 파일을 작성한다.

 

<!-- database/migrations/2024_05_09_082444_add_deleted_at_to_boards_table.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('boards', function (Blueprint $table) {
            $table->softDeletes(); // 소프트 딜리트를 위한 deleted_at 칼럼 추가
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('boards', function (Blueprint $table) {
            $table->dropSoftDeletes(); // 소프트 딜리트를 위한 deleted_at 칼럼 제거
        });
    }
};

 

파일을 저장한 후 터미널을 열어 Artisan 명령을 사용하여 마이그레이션을 실행한다.

 

php artisan migrate

 

서버를 재실행한다.

php artisan serve

 

 

19번 게시글을 삭제한다.

 

 

삭제되었다는 알림이 떴다.

 

 

데이터베이스 상에는 19번 게시글에 대한 데이터가 존재한다.

deleted_at 칼럼에 날짜와 시간도 저장됐다.