laravel的软删除

都说数据库字段不能为null,那为什么laravel的软删除设计的是 is null ,不能理解

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
自由与温暖是遥不可及的梦想
最佳答案

这个

有些字段可以 为 空

有些字段可以为 null

比如手机号 mobile 就必须 为null 并且加 (唯一)索引 同理 邮箱也是

那么 个性签名 这种 就可以不为null 设置为空字符串

因为 deleted_at 是时间类型的 不是 NULL 就必须是一个时间格式

在扩展包 设计者 就是用 是否为null来判断是否被删除

而不是 判断 deleted_at != 0000-00-00 00:00:00

2年前 评论
讨论数量: 17
翟宇鑫

:joy:
这个问题有必要纠结吗?你觉得它不对呢,你就自己实现一下
还有谁告诉你数据库字段不能为空的,出于什么原因考虑?
那一条新的数据插入数据库,deleted_at 不为空,应该填什么(0 or 1 也只是针对于软删除业务不同的解决方案而已,而 Laravel 没有选择这种方案)呢?

2年前 评论
xiaopi 2年前
douresources (楼主) 2年前
xiaopi 2年前
douresources (楼主) 2年前
pi_phq 2年前

为什么字段不能为 NULL

印象中,大多数讲解不能为 NULL 是因为使用 NULL 会占用额外空间,

而使用 NOT NULL 并设置默认值为 EMPTY STRING 可以避免这种情况。

为什么 deleted_at 等时间字段不使用 NOT NULL

你可以修改下试试,不能为 NULL,你给啥默认值?

空字符串不符合格式,'0000-00-00 00:00:00' 也不可以,

就连查询也没比 IS NULL 和 IS NOT NULL 更方便的方式了。

2年前 评论

laravel的delete_at的格式默认是时间字符格式,不为null就需要为时间格式,没法为空字符

2年前 评论

不为null一般是特指索引字段不为null,不要为优化而优化。

2年前 评论

索引 NULL 列需要额外的空间来保存,字段不做索引的话不用管

2年前 评论

如果你不想设置null的话可以重写软删除这块的方法

2年前 评论
自由与温暖是遥不可及的梦想

这个

有些字段可以 为 空

有些字段可以为 null

比如手机号 mobile 就必须 为null 并且加 (唯一)索引 同理 邮箱也是

那么 个性签名 这种 就可以不为null 设置为空字符串

因为 deleted_at 是时间类型的 不是 NULL 就必须是一个时间格式

在扩展包 设计者 就是用 是否为null来判断是否被删除

而不是 判断 deleted_at != 0000-00-00 00:00:00

2年前 评论

我的deletd_at 是int类型,我觉得如果是int类型的话delete_at 应该用默认0来表示

2年前 评论
自由与温暖是遥不可及的梦想 2年前
douresources (作者) (楼主) 2年前
自由与温暖是遥不可及的梦想 2年前
windawake

dba不懂c++开发,但是公司数据库由他管理,然后他去找了阿里dba文档,然后要求公司的业务开发人员不能把db的字段设置为null。老板信他,其他人也只能信他。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!