当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel5.1 框架模型软删除操作实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-03 20:26:04 浏览: 评论:0 

本文实例讲述了Laravel5.1 框架模型软删除操作,分享给大家供大家参考,具体如下:

软删除是比较实用的一种删除手段,比如说 你有一本账 有一笔记录你觉得不对给删了 过了几天发现不应该删除,这时候软删除的目的就实现了 你可以找到已经被删除的数据进行操作 可以是还原也可以是真正的删除。

1 普通删除

在软删除之前咱先看看普通的删除方法:

1.1 直接通过主键删除

  1. public function getDelete() 
  2. { 
  3.   Article::destroy(1); 
  4.   Article::destroy([1,2,3]); 
  5. } 

1.2 获取model后删除

  1. public function getDelete() 
  2. { 
  3.   $article = Article::find(3); 
  4.   $article->delete(); 
  5. } 

1.3 批量删除

  1. public function getDelete() 
  2. { 
  3.   // 返回一个整形 删除了几条数据 
  4.   $deleteRows = Article::where('id','>',3)->delete(); 
  5.   dd($deleteRows);  // 2 
  6. } 

2 软删除

2.1 准备工作

如果你要实现软删除 你应该提前做3件事情:

添加deleted_at 到模型的 $date 属性中。

在模型中使用 Illuminate\Database\Eloquent\SoftDeletes 这个trait

保证你的数据表中有deleted_at列 如果没有就添加这个列。

首先我们做第一步和第二步:

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4. use Illuminate\Database\Eloquent\SoftDeletes; 
  5. class Article extends Model 
  6. { 
  7.   // 使用SoftDeletes这个trait 
  8.   use SoftDeletes; 
  9.   // 白名单 
  10.   protected $fillable = ['title', 'body']; 
  11.   // dates 
  12.   protected $dates = ['deleted_at']; 
  13. } 

然后我们生成一个迁移文件来增加deleted_at列到数据表:

  1. class InsertDeleteAtIntroArticles extends Migration 
  2. { 
  3.   /** 
  4.    * Run the migrations. 
  5.    * 
  6.    * @return void 
  7.    */ 
  8.   public function up() 
  9.   { 
  10.     Schema::table('articles', function (Blueprint $table) { 
  11.       $table->softDeletes(); 
  12.     }); 
  13.   } 
  14.   /** 
  15.    * Reverse the migrations. 
  16.    * 
  17.    * @return void 
  18.    */ 
  19.   public function down() 
  20.   { 
  21.     Schema::table('articles', function (Blueprint $table) { 
  22.       $table->dropSoftDeletes(); 
  23.     }); 
  24.   } 
  25. } 

2.2 实现软删除

现在我们就可以删除一条数据试试啦:

  1. public function getDelete() 
  2. { 
  3.   $article = Article::first(); 
  4.   $article->delete(); 
  5. } 

↑ 当我们删了这条数据后 在数据表中的表示是 deleted_at 不为空 它是一个时间值,当delete_at不为空时 证明这条数据已经被软删除了。

2.3 判断数据是否被软删除

  1. if ($article->trashed()){ 
  2.   echo '这个模型已经被软删除了'; 
  3. } 

2.4 查询到被软删除的数据

有一点需要注意,当数据被软删除后 它会自动从查询数据中排除、就是它无法被一般的查询语句查询到。当我们想要查询软删除数据时 可以使用withTrashed方法

  1. public function getIndex() 
  2. { 
  3.   $article = Article::withTrashed()->first(); 
  4.   if ($article->trashed()){ 
  5.     echo '被软删除了';  // 代码会执行到这一行 
  6.   } 
  7. } 

我们还可以使用onlyTrashed,它和withTrashed的区别是 它只获得软删除的数据。

  1. public function getIndex() 
  2. { 
  3.   $articles = Article::onlyTrashed()->where('id','<','10')->get()->toArray(); 
  4.   dd($articles); 
  5. } 

2.5 恢复被软删除的数据

  1. public function getIndex() 
  2. { 
  3.   $article = Article::withTrashed()->find(6); 
  4.   $article->restore(); 
  5. } 

2.6 永久删除数据

  1. public function getIndex() 
  2. { 
  3.   $article = Article::withTrashed()->find(6); 
  4.   $article->forceDelete(); 
  5. }

Tags: Laravel5.1模型软删除

分享到: