Home> PHP Framework> Laravel> body text

What is the principle of soft deletion in laravel

WBOY
Release: 2022-02-22 18:18:30
Original
2344 people have browsed it

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".

What is the principle of soft deletion in laravel

#The operating environment of this article: Windows 10 system, Laravel version 6, Dell G3 computer.

What is the principle of soft deletion in laravel

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 thedeletemethod:

$post = Post::find(5); if($post->delete()){ echo '删除文章成功!'; }else{ echo '删除文章失败!'; }
Copy after login

This method returnstrueorfalse.

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);
Copy after login

You can also delete multiple models by passing in multiple model IDs at one time:

$deleted = Post::destroy([1,2,3,4,5]);
Copy after login

Call thedestroymethod 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();
Copy after login

The return result is the number of deleted articles.

2. Soft deletion and its related implementation

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_atfield 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 theSoftDeletestrait 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$dateAttribute array, placedeleted_atin it:


        
Copy after login

Then add thedeleted_atcolumn to the corresponding databaseposts, we use migration to implement, first execute the Artisan command:

php artisan make:migration alter_posts_deleted_at --table=posts
Copy after login

Then edit the generated PHP file as follows:

softDeletes(); }); } ...//其它方法 }
Copy after login

Then run:

php artisan migrate
Copy after login

This wayposts# There is adeleted_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 '软删除失败!'; }
Copy after login
Visit

http://laravel.app:8000/testin the browser, the page output is as follows:

When we get all the articles again through the following code:

$posts = Post::all(); dd($posts);
Copy after login
The article with ID 6 is no longer visible.

2.2 Query results contain soft-deleted models

What if you want to include soft-deleted records in the query results? You can use the

withTrashedmethod on theSoftDeletestrait:

$posts = Post::withTrashed()->get(); dd($posts);
Copy after login
After execution, the page displays as follows:

id The article with a score of 6 appears in the query results again. Sometimes we just want to view the soft-deleted model. There is a way to do this, through the

onlyTrashedmethod onSoftDeletes:

$posts = Post::onlyTrashed()->get(); dd($posts);
Copy after login
The page displays the results after execution As follows:

2.3 Soft Deletion Recovery

Sometimes we need to restore a soft-deleted model, you can use

SoftDeletesProvidedrestoremethod:

Restore a single model

$post = Post::find(6); $post->restore();
Copy after login

Restore multiple models

Post::withTrashed()->where('id','>',1)->restore();
Copy after login

Restore all models

Post::withTrashed()->restore();
Copy after login

Restore associated query model

$post = Post::find(6); $post->history()->restore();
Copy after login

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 the

forceDeletemethod provided bySoftDeletes:

$post = Post::find(6); $post->forceDelete();
Copy after login
to view the data table It can be found that the table record with id=6 has been deleted and no longer exists:

[Related recommendations:

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!