##1. Delete the model
1.1 Use delete to delete a model
Deleting a model is very simple. First get the model instance to be deleted, and then call the delete method:$post = Post::find(5); if($post->delete()){ echo '删除文章成功!'; }else{ echo '删除文章失败!'; }
1.2 Use destroy to delete the model
Of course, if the model ID to be deleted is known, you can use the simpler method destroy to delete it directly:$deleted = Post::destroy(5);
$deleted = Post::destroy([1,2,3,4,5]);
1.3 Use the query builder to delete the model
$deleted = Models\Post::where('views', 0)->delete();
2. Soft deletion implementation
The above deletion methods will delete the data table records 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 use deleted_at. If the corresponding model is soft-deleted, the value of the deleted_at field is the deletion time, otherwise the value is empty.
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use SoftDeletes; //设置表名 public $table = 'posts'; //设置主键 public $primaryKey = 'id'; //设置日期时间格式 public $dateFormat = 'U'; protected $guarded = ['id','views','user_id','updated_at','created_at']; protected $dates = ['delete_at']; }
php artisan make:migration alter_posts_deleted_at --table=posts
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AlterPostsDeletedAt extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function (Blueprint $table) { $table->softDeletes(); }); } ...//其它方法 }
php artisan migrate
$post = Post::find(6); $post->delete(); if($post->trashed()){ echo '软删除成功!'; dd($post); }else{ echo '软删除失败!'; }
$posts = Post::withTrashed()->get(); dd($posts);
$posts = Post::onlyTrashed()->get(); dd($posts);
Soft Deletion Recovery
Sometimes we need to restore a soft-deleted model. You can use the restore method provided by SoftDeletes:Restore a single There is something wrong with model
$post = Post::find(6); $post->restore();
$post = Post::withTrashed()->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();
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 forceDelete method provided by SoftDeletes:$post = Post::find(6); $post->forceDelete();
laravel introductory tutorials, welcome to learn online!
This article is reproduced from: https://blog.csdn.net/weixin_38112233/article/details/78574007The above is the detailed content of Learn about laravel model deletion and soft deletion in one article. For more information, please follow other related articles on the PHP Chinese website!