In laravel, soft deletion means that the data table records are not actually deleted from the database, but the representation status of the table records is marked as soft deletion, so that it can be filtered during query, so that The corresponding table record looks like it has been "deleted".
#The operating environment of this article: Windows 10 system, Laravel version 6, Dell G3 computer.
1. Delete the model
1.1 Use delete to delete the model
Deleting a model is very simple. First get the model instance to be deleted, and then call thedelete
method:
$post = Post::find(5); if($post->delete()){ echo '删除文章成功!'; }else{ echo '删除文章失败!'; }
This method returnstrue
orfalse
.
1.2 Use destroy to delete the model
Of course, if the model ID to be deleted is known, you can delete it directly using a simpler methoddestroy
:
$deleted = Post::destroy(5);
You can also delete multiple models by passing in multiple model IDs at one time:
$deleted = Post::destroy([1,2,3,4,5]);
Call thedestroy
method to return the number of deleted records.
1.3 Use the query builder to delete the model
Since it was mentioned earlier that the Eloquent model itself is a query builder, you can also use the query builder style to delete the model. For example, we want to To delete all articles with 0 views, you can use the following method:
$deleted = Models\Post::where('views', 0)->delete();
The return result is the number of deleted articles.
2.1 Soft deletion implementation
The above deletion methods will record the data table Delete from the database. In addition, the Eloquent model also supports soft deletion.
The so-called soft deletion means that the data table records are not actually deleted from the database, but the identification status of the table records is marked as soft deletion, so that it can be filtered when querying, so that the corresponding table records It looks like it has been "deleted". Laravel uses a date field as the identification status. This date field can be customized. Here we usedeleted_at
. If the corresponding model is soft-deleted, the value of thedeleted_at
field is the deletion time. , otherwise the value is empty.
To make the Eloquent model support soft deletion, some settings need to be made. First, use theSoftDeletes
trait in the model class. This trait provides a series of related methods for soft deletion. For details, please refer to the source codeIlluminate\Database\Eloquent\SoftDeletes
. In addition, you must also set$date
Attribute array, placedeleted_at
in it:
Copy after login
Then add thedeleted_at
column to the corresponding databaseposts
, we use migration to implement, first execute the Artisan command:
php artisan make:migration alter_posts_deleted_at --table=posts
Then edit the generated PHP file as follows:
softDeletes(); }); } ...//其它方法 }
Then run:
php artisan migrate
This wayposts# There is a
deleted_atcolumn in ##. Next, we write the test code in the controller:
$post = Post::find(6); $post->delete(); if($post->trashed()){ echo '软删除成功!'; dd($post); }else{ echo '软删除失败!'; }
http://laravel.app:8000/testin the browser, the page output is as follows:
$posts = Post::all(); dd($posts);
2.2 Query results contain soft-deleted models
What if you want to include soft-deleted records in the query results? You can use thewithTrashedmethod on the
SoftDeletestrait:
$posts = Post::withTrashed()->get(); dd($posts);
onlyTrashedmethod on
SoftDeletes:
$posts = Post::onlyTrashed()->get(); dd($posts);
2.3 Soft Deletion Recovery
Sometimes we need to restore a soft-deleted model, you can useSoftDeletesProvided
restoremethod:
Restore a single model
$post = Post::find(6); $post->restore();
Restore multiple models
Post::withTrashed()->where('id','>',1)->restore();
Restore all models
Post::withTrashed()->restore();
Restore associated query model
$post = Post::find(6); $post->history()->restore();
2.4 Forced deletion
If the model is configured with soft deletion but we really want to delete the database table records corresponding to the model, we can use theforceDeletemethod provided by
SoftDeletes:
$post = Post::find(6); $post->forceDelete();
laravel video tutorial]
The above is the detailed content of What is the principle of soft deletion in laravel. For more information, please follow other related articles on the PHP Chinese website!