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

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

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

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

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

1 普通删除

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

1.1 直接通过主键删除

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

1.2 获取model后删除

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

1.3 批量删除

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

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.   // 使用SoftDeletes这个trait 
  7.   use SoftDeletes; 
  8.   // 白名单 
  9.   protected $fillable = ['title''body']; 
  10.   // dates 
  11.   protected $dates = ['deleted_at']; 

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

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

2.2 实现软删除

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

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

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

2.3 判断数据是否被软删除

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

2.4 查询到被软删除的数据

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

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

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

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

2.5 恢复被软删除的数据

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

2.6 永久删除数据

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

Tags: Laravel5.1模型软删除

分享到: