Laravel 中 deleted_at 的默认设定与唯一约束产生冲突,该如何解决?
-
deleted_at
默认值为null
,这一点在给表创建唯一约束的时候有冲突,MySQL
和PgSQL
(其他数据库暂不了解)中唯一约束允许多个null
值存在。 -
使用软删除可能碰到的问题:如果表中有唯一约束的字段,比如
User
表的username
,一行记录被软删除后,username
已经被占用了,新的数据不能使用该username
。而如果将deleted_at
加入唯一约束,由于deleted_at
默认值是null
,MySQL
和PgSQL
下唯一值是不算NULL的,即唯一值列出现多个NULL值都不会报错。 -
这就有点尴尬了,如果一张表想加入唯一约束,就不能使用软删除功能,要不然就重写软删除逻辑,给
deleted_at
设置一个默认值,但这应该有违Laravel设计的本意,Laravel内是不是提供其他解决方式?我不是很熟悉,特此请教 :pray:
推荐文章: