-
라라벨 소프트 삭제(Soft Deleting)백엔드/laravel 2024. 1. 20. 13:17
레코드를 실제로 데이터베이스에서 제거하지 않고 삭제로 표시할 수 있습니다.
이는 레코드에 소프트 삭제를 나타내는 deleted_at 타임스탬프를 설정하는 방식입니다.
먼저, deleted_at 컬럼을 추가하기 위한 마이그레이션을 확인해봅시다.
Schema::table('posts', function (Blueprint $table) {
$table->softDeletes(); // deleted_at 컬럼 추가
});이제 모델에서 소프트 삭제를 활성화해야 합니다.
모델 클래스에 use SoftDeletes를 추가하여 이를 활성화할 수 있습니다.
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes; // 소프트 삭제를 활성화하는 트레이트 추가
}트레이트를 추가했으므로, 소프트 삭제를 사용할 수 있습니다.
예를 들어, 레코드를 소프트 삭제하려면 다음과 같이 수행할 수 있습니다.
// 소프트 삭제 예제
$latestPost = Post::latest()->first(); // 가장 최근의 포스트 가져오기
$postId = $latestPost->id;
$postToDelete = Post::find($postId);
$result = $postToDelete->delete(); // 소프트 삭제 실행
// 삭제 후
if ($result) {
echo "Post with ID {$postId} has been soft deleted.";
}소프트 삭제된 레코드를 포함하여 조회하려면 withTrashed 메서드를 사용할 수 있습니다.
$softDeletedPosts = Post::withTrashed()->get();
foreach ($softDeletedPosts as $post) {
echo "Post ID: {$post->id}, Deleted At: {$post->deleted_at}\n";
}또한, 소프트 삭제된 레코드를 복구하거나 완전히 삭제하는 것도 가능합니다.
// 소프트 삭제된 레코드 복구 예제
$restoredRows = Post::withTrashed()->where('id', 1061)->restore();
// 완전 삭제 예제 (force delete)
$result = Post::withTrashed()->where('id', 1061)->forceDelete();이러한 메서드들을 사용하여 소프트 삭제와 레코드의 복구, 완전 삭제를 쉽게 구현할 수 있습니다.
이를 통해 삭제된 레코드를 추적하고 필요에 따라 복구할 수 있습니다
'백엔드 > laravel' 카테고리의 다른 글
라라벨 기존 모델의 복사본(replicate) 만들기 (0) 2024.01.20 라라벨 소프트 삭제(soft deleting)된 레코드를 주기적으로 삭제하기 (0) 2024.01.20 라라벨 delete, truncate, destroy 메서드 (0) 2024.01.19 라라벨 updateOrCreate 및 upsert 메서드 (0) 2024.01.19 라라벨 isDirty, isClean 및 wasChanged 메서드 (0) 2024.01.19