Soft-deleting a model means flagging it as deleted when it’s still available in the database table. The deleted data still exists, but it can’t be seen or accessed by users.
You can refer to this shot for more information on soft-deleting.
Let’s say we have a post on a blog with several comments. The post is the parent model, while the comments are the child model. Now, suppose we don’t want a user to access the post comments that were just soft-deleted.
In this shot, we will use the Laravel soft-deletes-parent
package.
Run the following composer command.
composer require
dillingham/soft-deletes-parent
You will need to add parent_deleted_at
to the child table.
Schema::table('comments', function (Blueprint $table) {
$table->softDeletesParent();
});
Use the code above in a new migration file so that the parent_deleted_at
column will be added to the comments table.
<?php
namespace App\Models;
use Dillingham\SoftDeletesParent\SoftDeletesParent;//Import this class
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use SoftDeletesParent;//traits added
}
The trait added above will enable the soft-delete so that any time a delete query is issued in the parent model, it will delete the corresponding child model.
To let your Laravel application know exactly what you want to do, you will need to register it in the AppServiceProvider
class located in App/Providers
, like so:
<?php
namespace App\Providers;
class AppServiceProvider
{
public function register()
{
Comment::softDeletesParent(Post::class);
}
}
We have now successfully soft-deleted any Posts, and all the corresponding child comments will also be deleted.