Laravel更新场景下唯一校验如何忽略软删除行与当前待更新行
解决方案
你只需要在原有Rule::unique链式调用后追加whereNull('deleted_at')条件,即可同时满足两个校验要求,修改后的验证规则如下:
return [ 'attribute_type_id' => 'required', 'name' => [ 'required', Rule::unique('attributes')->ignore($ignore)->whereNull('deleted_at'), ], 'order' => 'integer|nullable' ];
规则说明
ignore($ignore):自动排除传入的待更新行(支持传入行ID或者模型实例),修改当前行自身属性时不会触发重复校验报错whereNull('deleted_at'):仅检索deleted_at字段为NULL的未软删除行做唯一性统计,和你新增逻辑里的unique:attributes,deleted_at,NULL写法效果完全一致
注意:如果你的
attributes表主键不是默认的id,需要在ignore方法的第二个参数指定主键字段名,示例:Rule::unique('attributes')->ignore($ignore, '你的主键字段名')->whereNull('deleted_at')
内容的提问来源于stack exchange,提问作者B L Praveen
相关产品推荐
相关产品推荐

