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:
关于 LearnKu
推荐文章: