Xóa mềm (soft delete) là một kỹ thuật trong Laravel cho phép bạn đánh dấu một bản ghi trong cơ sở dữ liệu là “đã xóa” mà không thực sự xóa nó. Điều này rất hữu ích khi bạn muốn giữ lại dữ liệu để có thể phục hồi sau này hoặc để thực hiện các phân tích dữ liệu mà không cần mất thông tin. Laravel hỗ trợ xóa mềm thông qua tính năng SoftDeletes
. Bài viết này sẽ hướng dẫn bạn cách thực hiện xóa mềm trong Laravel.
Bước 1: Cài đặt SoftDeletes trong Model
Trước tiên, bạn cần thêm tính năng SoftDeletes
vào model mà bạn muốn thực hiện xóa mềm. Giả sử bạn có một model tên là Post
.
1.1. Sử dụng use SoftDeletes
Mở tệp Post.php
trong thư mục app/Models
và thêm trait SoftDeletes
vào model:
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;
class Post extends Model
{
use SoftDeletes;
// Các thuộc tính và phương thức khác của model
}
1.2. Thêm cột deleted_at
vào bảng
Để thực hiện xóa mềm, bạn cần có một cột deleted_at
trong bảng của model. Bạn có thể tạo migration để thêm cột này vào bảng. Chạy lệnh sau để tạo migration mới:
php artisan make:migration add_deleted_at_to_posts_table --table=posts
Mở tệp migration mới được tạo trong thư mục database/migrations
và thêm cột deleted_at
:
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class AddDeletedAtToPostsTable extends Migration
{
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->softDeletes(); // Thêm cột deleted_at
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropSoftDeletes(); // Xóa cột deleted_at
});
}
}
Chạy migration để cập nhật cơ sở dữ liệu:
Bước 2: Sử dụng các phương thức xóa mềm
2.1. Xóa mềm bản ghi
Để xóa mềm một bản ghi, bạn có thể sử dụng phương thức delete()
:
$post = Post::find(1); // Tìm bản ghi có id = 1
$post->delete(); // Xóa mềm bản ghi
2.2. Khôi phục bản ghi đã xóa mềm
Nếu bạn muốn khôi phục một bản ghi đã xóa mềm, bạn có thể sử dụng phương thức restore()
:
$post = Post::withTrashed()->find(1); // Tìm bản ghi đã xóa mềm
$post->restore(); // Khôi phục bản ghi
2.3. Xóa hoàn toàn bản ghi
Để xóa hoàn toàn một bản ghi (bỏ qua xóa mềm), bạn có thể sử dụng phương thức forceDelete()
:
$post = Post::withTrashed()->find(1); // Tìm bản ghi đã xóa mềm
$post->forceDelete(); // Xóa hoàn toàn bản ghi
Bước 3: Truy vấn các bản ghi xóa mềm
Laravel cung cấp các phương thức để truy vấn các bản ghi xóa mềm:
3.1. Truy vấn tất cả các bản ghi (bao gồm đã xóa)
Sử dụng phương thức withTrashed()
để truy vấn tất cả các bản ghi, bao gồm cả những bản ghi đã xóa mềm:
$posts = Post::withTrashed()->get(); // Lấy tất cả các bản ghi, bao gồm đã xóa
3.2. Truy vấn các bản ghi chưa xóa
Để chỉ truy vấn các bản ghi chưa xóa, bạn có thể sử dụng phương thức all()
:
$posts = Post::all(); // Lấy tất cả các bản ghi chưa xóa
3.3. Truy vấn các bản ghi đã xóa
Sử dụng phương thức onlyTrashed()
để truy vấn các bản ghi đã xóa mềm:
$posts = Post::onlyTrashed()->get(); // Lấy tất cả các bản ghi đã xóa
Kết luận
Xóa mềm là một kỹ thuật hữu ích giúp bạn quản lý dữ liệu một cách linh hoạt trong ứng dụng Laravel. Với tính năng SoftDeletes
, bạn có thể dễ dàng đánh dấu các bản ghi là “đã xóa” mà không thực sự xóa chúng khỏi cơ sở dữ liệu. Điều này không chỉ giúp bạn bảo toàn dữ liệu mà còn cho phép khôi phục lại các bản ghi khi cần thiết. Bằng cách làm theo hướng dẫn trên, bạn có thể thực hiện xóa mềm trong dự án của mình một cách dễ dàng và hiệu quả.