我有一个Laravel User模型,它在usernameemail上有唯一的验证规则.在我的存储库中,当我更新模型时,我会重新验证字段,这样就不会出现所需规则验证的问题:

public function update($id, $data) {
    $user = $this->findById($id);
    $user->fill($data);
    $this->validate($user->toArray());
    $user->save();

    return $user;
}

在以下情况下测试失败:

ValidationException:{"用户名":["用户名已被删除."

有没有办法优雅地解决这个问题?

推荐答案

将当前正在更新的实例的id追加到验证器.

  1. 传递实例的id以忽略唯一验证器.

  2. 在验证器中,使用一个参数来检测您是updating岁还是creating岁.

如果正在更新,请强制唯一规则忽略给定id:

//rules
'email' => 'unique:users,email_address,' . $userId,

如果要创建,请照常进行:

//rules
'email' => 'unique:users,email_address',

Php相关问答推荐

自定义通知在Woocommerce我的帐户自定义端点页面上不起作用

将带有值的属性添加到WooCommerce产品,保留现有属性

WooCommerce基于元数据的自定义范围目录排序

Laravel集合块()方法

将产品类别添加到WooCommerce产品附加信息

PHP空数组定义与开始或结束逗号

在laravel 9或10 php中向中间件响应添加自定义数据

如何在汇总表构建器中操作LALAVEL细丝Sum::Make()值

创建一个Woocommerce我的帐户订单页面,仅显示已完成的订单

HTAccess重写一些URL,但将所有其他URL发送到另一个页面

未收到Strava WebHook事件数据

登录后重定向在WooCommerce中购买产品的用户

用ajax获取文件 - CORS问题&;设置缓存?

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

无法读取某些 WordPress 主机上的 cookie

在 Botiga 主题模板中添加复选框到政策行.Woocommerce

自定义主键值未正确显示

用于检测此模式的正则表达式:something;something=something,something=something... 未知次数

PHP Loop 在迭代中使用修改后的数据

Symfony 在将它传递给 Twig 时是否从数据库中获取整个对象?