当模型被软删除时,它们并不会真的从数据库中被移除。而是会在模型上设置一个 deleted_at 属性并将其添加到数据库。如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空。
 

1.做一些设置

  首先在模型类中要使用SoftDeletestrait,该trait为软删除提供一系列相关方法,具体可参考源码Illuminate\Database\Eloquent\SoftDeletes,此外还要设置$date属性数组,将deleted_at置于其中:
<?php
namespace App\Models; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model {
use SoftDeletes;
//...其他一些设置
protected $dates = ['delete_at'];
}

2.向数据库中的相应数据表添加delete_at字段

  1>这里我们使用数据迁移来实现
  php artisan make:migration alter_posts_deleted_at --table=posts
 
  2>此时在database/migrations文件夹下会生成一个相应文件,更改如下
<?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();
});
}
...//其它方法
}
  3>再次运行命令 php artisan migrate ,发现数据库相应的数据表中已经有delete_at字段了
 

3.使用方法

  在模型上调用 delete 方法时,deleted_at 字段将会被设置成目前的日期和时间。而且,当查找有启用软删除的模型时,被软删除的模型将会自动从所有查找结果中排除。
  //在模型上调用delete方法
  $post = Post::find(6); $post->delete();
  //要确认指定的模型实例是否已经被软删除,可以使用 trashed 方法:  
   if($post->trashed()){
    echo '软删除成功!';
    dd($post);
  }else{
    echo '软删除失败!';
  }   //查找被软删除的模型
  $flights = App\Flight::withTrashed() ->where('account_id', 1) ->get();   //onlyTrashed 方法会只获取已被软删除的模型:
  $flights = App\Flight::onlyTrashed() ->where('airline_id', 1) ->get();   //恢复单个已经被软删除的模型
  $flight = Flight::withTrashed()-find(1); //这里要注意如果被软删除直接find是查不到的
  $flight->restore();   //恢复多个模型
  App\Flight::withTrashed() ->where('airline_id', 1) ->restore();   // 强制删除单个模型实例...
  $flight->forceDelete();   // 强制删除所有相关模型...
  $flight->history()->forceDelete();
 
 

最新文章

  1. Android使用ViewPager实现左右循环滑动及轮播效果
  2. 网络之Ip地址
  3. Linq------各种查询语句大全
  4. hdu 1735 字数统计
  5. ASP.NET一些公共方法commTools
  6. matrix_world_final_2013
  7. Spring+Hibernate配置多数据源
  8. qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用
  9. 如何成为一个牛逼的C/C++程序员?
  10. Server Tomcat v7.0 Server at localhost was unable
  11. Postman怎么用?
  12. 解决Plugin is too old,please update to a more recent version,or set ANDROID_DAILY_OVERRIDE..
  13. LeetCode 237. Delete Node in a Linked List 删除链表结点(只给定要删除的结点) C++/Java
  14. SQL Server 2000 字段类型 Delphi 数据类型对照
  15. Educational Codeforces Round 47 (Rated for Div. 2)E.Intercity Travelling
  16. eleemnt-ui修改主题颜色
  17. 在VS2013 使用C语言库函数,出现出现错误,提示使用不安全函数use _CRT_SECURE_NO_WARNINGS
  18. Spring boot 直接访问templates中html文件
  19. ABAQUS粘弹性边界及地震荷载施加的简单实现(Matlab生成input文件)
  20. Codeforces.600E.Lomsat gelral(dsu on tree)

热门文章

  1. 解决IE8的兼容问题
  2. unhandled event loop exception解决方案
  3. Neo4j-3.0.3 (Debian 8)
  4. linux打开文件数测试
  5. hihocoder 1080 线段树(区间更新)
  6. 自行解决12306页面显示异常的问题(长城宽带下WWW。12306无法正常使用)
  7. 【BZOJ2002】[HNOI2010] 弹飞绵羊(大力分块)
  8. 在RichTextBox控件中替换文本文字
  9. CUDA编程时,线程块的处理方法
  10. 仅用移动开发服务:开发native应用