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-需要在设置软删除的模型里设置
随机推荐
- Render Texture coordinates
https://docs.unity3d.com/550/Documentation/Manual/SL-PlatformDifferences.html Render Texture coordin ...
- Android动态载入Dex机制解析
1.什么是类载入器? 类载入器(class loader)是 Java™中的一个非常重要的概念.类载入器负责载入 Java 类的字节代码到 Java 虚拟机中. Java 虚拟机使用 Java 类的方 ...
- Node.js abaike图片批量下载Node.js爬虫1.00版
这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ...
- 使用Python发送电子邮件
使用python发送邮件并不难,这里使用的是SMTP协议. Python标准库中内置了smtplib,使用它发送邮件只需提供邮件内容与发送者的凭证即可. 代码如下: # coding:utf-8 im ...
- 在OpenERP报表中使用selection 类型字段
OpenERP 在报表的创作中始终有一个麻烦,那就是在报表中通过对象导航的方式获取的 selection 字段只能获取到该字段的 key 而不能获取对应的用户友好的描述文本. 举个具体的例子:销售单的 ...
- 2014秋C++第5周项目1參考-见识刚開始学习的人常见错误
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/a ...
- 关于继承Fragment后重写构造方法而产生的错误
在android开发中.写了一个关于继承Fragment的类时,假设有重载构造函数时.会提示"Avoid non-default constructors in fragments: use ...
- 控制应用程序重启,外部程序C# 实例
第一步:新建一个控制台项目,作为关闭当前应用程序的调用程序. using System; using System.Configuration; using System.Diagnostics; n ...
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡(转)
一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...
- 没有局域网环境,全是公网IP可以做LVS吗,该如何做了!请大家赐教!
没有局域网环境,全是公网IP可以做LVS吗,该如何做了!请大家赐教! 由 wjjava 在 周四, -- : 提交 LVS集群 现在有3台服务器,各有一个公网IP地址.IP地址形式如下: IP1:12 ...