
Soft Delete Child Models When a Parent is Deleted
Laravel Soft Deletes Parent is a package by Brian Dillingham that soft deletes child models when a parent model is soft-deleted:
Automatically soft delete a model’s children while maintaining their own soft-deleted state when you restore the parent model. After installing the trait below, the
Post
model’sparent_deleted_at
will update whenever anAuthor
model is deleted or restored. This allows you to maintain the originaldeleted_at
for thePost
model afterAuthor
is restored. ThePost
model will scope queries to exclude any where the parent is deleted.
To use this package, you’ll want to add a parent_deleted_at
column on the child database table (this package provides a migration helper to generate the correct column), add a trait to the child model, and register parent models.
Given a parent Author
model and a child Post
model, here’s how you’d set it up:
1// Use the `SoftDeletesParent` trait on the child model.
2namespace AppModels;
3
4use DillinghamSoftDeletesParentSoftDeletesParent;
5use IlluminateDatabaseEloquentModel;
6
7class Post extends Model
8{
9 use SoftDeletesParent;
10}
11
12// Register parent models
13class AppServiceProvider
14{
15 public function register()
16 {
17 Post::softDeletesParent(Author::class);
18 }
19}
Now you can query with provided scopes
1// Get all posts, including soft-deleted records.
2Post::withParentTrashed()->get();
3
4// Get soft-deleted posts.
5Post::onlyParentTrashed()->get();
You can learn more about this package, get full installation instructions, and view the source code on GitHub.
Credit: Source link