Laravel5.1 模型 --软删除
软删除是比较实用的一种删除手段,比如说 你有一本账 有一笔记录你觉得不对给删了 过了几天发现不应该删除,这时候软删除的目的就实现了 你可以找到已经被删除的数据进行操作 可以是还原也可以是真正的删除。
1 普通删除
在软删除之前咱先看看普通的删除方法:
1.1 直接通过主键删除
public function getDelete()
{
Article::destroy(1);
Article::destroy([1,2,3]);
}
1.2 获取model后删除
public function getDelete()
{
$article = Article::find(3);
$article->delete();
}
1.3 批量删除
public function getDelete()
{
// 返回一个整形 删除了几条数据
$deleteRows = Article::where('id','>',3)->delete();
dd($deleteRows); //
}
2 软删除
2.1 准备工作
如果你要实现软删除 你应该提前做3件事情:
- 添加deleted_at 到模型的 $date 属性中。
- 在模型中使用 Illuminate\Database\Eloquent\SoftDeletes 这个trait
- 保证你的数据表中有deleted_at列 如果没有就添加这个列。
首先我们做第一步和第二步:
<?php namespace App; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; class Article extends Model
{
// 使用SoftDeletes这个trait
use SoftDeletes;
// 白名单
protected $fillable = ['title', 'body']; // dates
protected $dates = ['deleted_at'];
}
然后我们生成一个迁移文件来增加deleted_at列到数据表:
class InsertDeleteAtIntroArticles extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->softDeletes();
});
} /**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropSoftDeletes();
});
}
}
2.2 实现软删除
现在我们就可以删除一条数据试试啦:
public function getDelete()
{
$article = Article::first();
$article->delete();
}
↑ 当我们删了这条数据后 在数据表中的表示是 deleted_at 不为空 它是一个时间值,当delete_at不为空时 证明这条数据已经被软删除了。
2.3 判断数据是否被软删除
if ($article->trashed()){
echo '这个模型已经被软删除了';
}
2.4 查询到被软删除的数据
有一点需要注意,当数据被软删除后 它会自动从查询数据中排除、就是它无法被一般的查询语句查询到。当我们想要查询软删除数据时 可以使用withTrashed方法
public function getIndex()
{
$article = Article::withTrashed()->first();
if ($article->trashed()){
echo '被软删除了'; // 代码会执行到这一行
}
}
我们还可以使用onlyTrashed,它和withTrashed的区别是 它只获得软删除的数据。
public function getIndex()
{
$articles = Article::onlyTrashed()->where('id','<','10')->get()->toArray();
dd($articles);
}
2.5 恢复被软删除的数据
public function getIndex()
{
$article = Article::withTrashed()->find(6);
$article->restore();
}
2.6 永久删除数据
public function getIndex()
{
$article = Article::withTrashed()->find(6);
$article->forceDelete();
}
Laravel5.1 模型 --软删除的更多相关文章
- laravel5.2总结--软删除
当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...
- laravel框架总结(九) -- 软删除
当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...
- Entity Framework Core 软删除与查询过滤器
本文翻译自<Entity Framework Core: Soft Delete using Query Filters>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意 ...
- laravel and lumen 软删除操作
知识都是有联系的,这绝对是真理.作为一名小白,看了一点官方文档,把我自己理解的软删除操作给大家讲讲.有些就是套用官方文档的话. 定义:什么是软删除呢,所谓软删除指的是数据表记录并未真的从数据库删除,而 ...
- Laravel设置软删除及其恢复系列操作
软删除及其相关实现 在模型类中要使用SoftDeletestrait并设置$date属性数组 <?php namespace App\Models; use Illuminate\Databas ...
- DDD Code First 迁移数据实现EF CORE的软删除,值对象迁移配置
感谢Jeffcky大佬的博客: EntityFramework Core 2.0全局过滤 (HasQueryFilter) https://www.cnblogs.com/CreateMyself/p ...
- 【EF】Entity Framework Core 软删除与查询过滤器
本文翻译自<Entity Framework Core: Soft Delete using Query Filters>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意 ...
- thinkphp自动完成、软删除 和时间戳
thinkphp自动完成.软删除 和时间戳 一.总结 自动完成:没有手动赋值的情况下进行手动处理 软删除:实现假删除,可以进行恢复 时间戳:系统支持自动写入创建和更新的时间戳字段 二.thinkphp ...
- php手记之05-tp5软删除
01-需要在设置软删除的模型里设置
随机推荐
- http://blog.csdn.net/rosten/article/details/17068285
http://blog.csdn.net/rosten/article/details/17068285
- C# 中 in,out,ref 的作用与区别
In:过程不会改写In的内容 Out和out:传入的值不会被过程所读取,但过程可以写 ref:传入的值,过程会读,也会写 就象你把布料送到裁缝的一个收料箱(裁缝用这个区别是哪家客户) IN:这块布料, ...
- 时光轴二之RecyclerView版时光轴效果
由于如今RecyclerView是support-v7包中的新组件,是一个强大的滑动组件.与经典的ListView相比,相同拥有item回收复用的功能,可是直接把viewholder的实现封装起来,用 ...
- scanf函数具体解释与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数.遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- 微信小程序flex容器属性详解
flex容器属性详解 flex-direction决定元素的排列方向 flex-wrap决定元素如何换行 flex-flow 是 flex-direction 和flex-wrap的简写 justif ...
- 设置客户端连接PostgreSQL不需要密码
平常工作中,有时需要远端连接 PostgreSQL 数据库做些维护,例如远端备份等:如果备份脚本写在远端机器,备份的时候会弹出密码输入提示,那么脚本就不能后台执行,这里总结了几种不弹出密码输入提示的方 ...
- (转)jquery图片左右滚动
<!DOCTYPE HTML> <html> <head> <title>基于jQuery的控制左右滚动效果_自动滚动版本</title> ...
- SqlServer+Topshelf+Quartznet做集群,定时任务分布式处理
接触Quartznet之前,老东家用的是总监自己写的分布式任务框架,好用但是配置麻烦,unity,一个微软容器,配置节点错一个,整个使用到unity文件的项目全部跑不起来,这后果真的受不了... 目前 ...
- UINavigationController(二)
在使用UINavigtionController的时候,常常会弄不清哪些属性是UINavigationController的,哪些属性是UIViewController的.并且在更改导航栏和工具栏的样 ...
- excel文件打开乱码解决
Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取.(这个bom是微软自己定义的一种文件头部协定,顾名思义存储在文件头部,存储 ...