数据库软删除php,应用 Laravel 的软删除你需要注意的几点
Laravel 软删除存在的问题
1、软删除使用的标记类型是时间类型,通过is null条件查询,删除标记取值不支持定义
//Illuminate\Database\Eloquent\SoftDeletingScope
public function apply(Builder $builder, Model $model)
{
$builder->whereNull($model->getQualifiedDeletedAtColumn());
}
3、软删除trait使用之后,不会对字段是否存在进行校验。对应已经存在的表,有些表存在软删除,有些表不存在软删除字段,如果要应用软删除,只能在需要应用的model中一个个添加trait
如果重写Illuminate\Database\Eloquent\SoftDeletestrait,如果类常量DELETED_AT为null,则不执行相应的软删除操作
4、join操作,只会在对当前模型添加软删除查询条件
5、在belonsToMany关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,不会对中间表应用软删除条件
belonsToMany中的中间表是传入的表名参数,天然没办法获取中间表是否需要应用软删除。被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件
6、在hasManyThrough关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。但是,如果要查询包含已删除的关联关系,中间表的删除标记条件不会去除。
hasManyThrough中,中间表是通过中间对象传入,可以获取到中间表是否应用软删除。但是中间表的软删除不是通过scope实现的,关联关系对象在创建的时候就已经把中间表的软删除条件附加上去了,因此,即使指定了withTrashed,也会有中间表的软删除查询条件。
如果要修改,也可以,通过scope的方式附加软删除条件,这样就能保证软删除的查询条件是在真正查询的时候才附加上去。
从上面可以看出,Laravel的软删除,在关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。
转载自 公众号【写 PHP 的老王】
本作品采用《CC 协议》,转载必须注明作者和本文链接
写PHP的老王
数据库软删除php,应用 Laravel 的软删除你需要注意的几点相关推荐
- Laravel实现软删除
Laravel实现软删除 Laravel 的 Eloquent ORM 提供了一个漂亮.简洁的 ActiveRecord 实现来和数据库交互.每个数据库表都有一个对应的「模型」用来与该表交互.你可以通 ...
- 用editplus删除csv文件中的软回车
用excel删除软回车,网上有说明,这里不再重复.本文仅讲述如何使用editplus删除文本中包含的大量软回车. 一个csv文件在导入数据库时,如果包含软回车,有时候会出现错误,导致导入过程中断.我们 ...
- 软考(一):迎战软考
[前言] 从八月末我们就开始了软考(十一月除)的备考征程.经过无数次的鲜血证明,要想完成一个目标需要有个切实可行的计划,而不能随意而为.以下就一起来展现一下我们规划. [计划安排] ·考前:62天(8 ...
- 计算机二三四级软考、志愿者实习、软著外观实用发明专利、著作、科研论文EI/SCI在大学期间野蛮成长方式
计算机二三四级软考.志愿者实习.软著外观实用发明专利.著作.科研论文EI/SCI在大学期间野蛮成长方式 真的有很长时间没有更新博文了,在这里正逢有一定的小时间可以让我写一些文字来分享一下大学常见的经历 ...
- homelede软路由设置方法_二级lede软路由设置方法,lede设置软路由网卡
二级lede软路由设置方法 方法1:下一个sygate将制作一个软件桥. 在sygate中配置两个网卡的作用,一个是内部网络网关,连接到另一台计算机:另一个是访问外部网络,连接到外部网络. 方法二:( ...
- 数据库防火墙onefirewall,如何防范黑客物理删除?避免携程事件再次上演
数据库防火墙onefirewall,如何防范黑客物理删除?避免携程事件再次上演 首先解释一下数据库防火墙原理(白名单机制):就类似360手机卫士,事先定义通讯录,别人给你打电话时,只有在通讯录的电话可 ...
- Oracle数据库用户角色、表空间创建、删除命令
Oracle数据库用户角色.表空间创建.删除命令 //创建数据表空间 create tablespace BCC datafile 'D:\oracle\oradata\BCC\BCC.dbf' si ...
- 自动备份网站和数据库打包并上传FTP服务器并删除前30天文件
自动备份网站和数据库打包并上传FTP服务器并删除前30天文件 @echo off<nul 3>nul Set nowdate=%date:~0,10% set nowdate=%nowda ...
- 属性被分为八大类不包括_家庭软装八大类有哪些 软装八大类风格有什么特点...
软装就是西方基本装修的硬装完工之后,放置的一些家具以及装饰用品,那么在家装中软装八大类有哪些呢?下面就和郑州装修网小编一起来了解下吧. 软装八大类有哪些 软装八大类指的是:家具.灯具.布艺.花艺.地毯 ...
最新文章
- MML命令_华为TD-LTE后台常用MML命令操作
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)...
- php 这样写日志 sleep你会了吗?
- Codeforces Round #554 (Div. 2) 1152A - Neko Finds Grapes
- java 字符串数组连接
- [导入]blog年终小结
- win8oracle10g安装报错,Win8电脑安装Oracle 10g提示程序异常终止的解决方法
- 输出该链表中倒数第k个结点
- perl语言中的AWK之基础篇
- 关于larbin的编译
- 离散型概率分布的抽样
- metal slug java_推荐一款极速CAJ阅读器:稻壳阅读器
- Excel 常用函数和公式
- PC解决电子签名的方法
- python编程作业
- linux 内存block读取6,Linux硬盘
和文件系统维护
- 百度爱番番实时CDP建设实践
- VUE渲染富文本编辑器内容
- Motrix - 清爽开源免费的全能下载工具 (跨平台、支持 BT / 磁力链 / 百度网盘)
- Response的用法