【问题标题】:Use Laravel validations when html input names vary from column name当 html 输入名称与列名称不同时使用 Laravel 验证
【发布时间】:2018-01-12 04:58:13
【问题描述】:

我的 Laravel 应用程序无法通过 required 验证。

这是我的验证规则...

$rules = [
   'email' => 'required|unique:members|max:100',
];

具体的列名是email。 HTML页面输入字段名称为emailAddress

在这些情况下该怎么办?如何告诉这个验证检查哪个请求字段?

谢谢!

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    发现问题...

    验证检查的是输入字段名称。不是列名。

    这里的问题是电子邮件字段的unique 验证规则。我必须指定要检查已存储电子邮件的列。

    这样

    unique:members,email
    

    我必须在表名之后使用列名,用,(逗号)分隔。

    所以,规则会是这样的

    $rules = [
        'emailAddress' => 'required|unique:members,email|max:100',
    ];
    

    就是这样!

    【讨论】:

      【解决方案2】:

      您不会在验证中检查列名,只需使用输入名称即可。

      $rules = [
         'emailAddress' => 'required|unique:members|max:100',
      ];
      

      我想更清楚一点:Request 实例是被检查的。验证不与数据库交互,它与请求交互

      【讨论】:

      • 我试过了,有SQLSTATE[42S22]: Column not found: 1054 Unknown column 'emailAddress' in 'where clause'
      • 哦,那么问题不在于验证。当您将其放入数据库时​​,您需要将请求的列版本转换为您的表可以接受的版本。
      • 不,其实这里的问题是email字段的unique验证规则。我必须指定要检查已存储电子邮件的列。能够修复错误。谢谢,你的回答很有帮助!
      • 哦,我明白了,很高兴能为您提供帮助。祝您申请顺利,并确保接受您的回答,以便其他人知道解决方案。
      【解决方案3】:

      您可以将name 属性更改为email。

      或者你可以使用这样的验证规则:

      'emailAddress' => 'required|unique:members|max:100',
      

      然后在控制器方法中这样做:

      Model::create([
          'email' => $request->emailAddress,
      ]);
      

      【讨论】:

      • 不,在这种情况下,我不能触摸前端。实现 UI 的是另一方
      • @TharinduLucky 然后做第二个。
      • 其实这里的问题是email 字段的unique验证规则。我必须指定要检查已存储电子邮件的列。能够修复错误。谢谢,你的回答很有帮助!
      猜你喜欢
      • 2014-11-05
      • 1970-01-01
      • 2017-07-10
      • 2017-10-27
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多