分类目录归档:PHP

Laravel5软删除(SoftDeletes)的deleted_at改造

正常来说数据库最好不要做真正的硬删除操作,所以可以改用柔和的软删除。也就是在数据库增加一个字段,比如is_deleted,如果是0的时候表示正常,1表示已被删除。

使用软删除可能碰到的问题:如果表中有UNIQUE索引的字段,比如User表的username,被软删除后,username已经被占用了,新的数据不能使用该username。解决方法是,定义联合索引唯一约束,即UNIQUE KEY username_INDEX (username)改成UNIQUE KEY username_INDEX (username, is_deleted)。

看上去问题好像解决了,但是新的问题:如果username被第二次软删除,is_deleted为1的也被占用了。进一步的解决方法是把is_deleted定义为,当0值时表示未删除,非0表示被删除并且是一个自增ID或者时间戳或者UUID,那么就能保证唯一性。

继续阅读Laravel5软删除(SoftDeletes)的deleted_at改造