ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 라라벨 소프트 삭제(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();

     

    이러한 메서드들을 사용하여 소프트 삭제와 레코드의 복구, 완전 삭제를 쉽게 구현할 수 있습니다.

    이를 통해 삭제된 레코드를 추적하고 필요에 따라 복구할 수 있습니다

    댓글

Designed by Tistory.