데이터베이스에서 레코드를 실제로 삭제하는 대신 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 칼럼에 날짜와 시간도 저장됐다.
