【问题标题】:Laravel 5.4 validation unique issueLaravel 5.4 验证独特问题
【发布时间】:2017-07-12 05:20:33
【问题描述】:

我正在尝试更新用户,当电子邮件已被接收时,它会给出错误,除非它是您自己的电子邮件。现在我的代码是:

$user = User::find($id);

$input['email'] = request('email');

$rules = array('email' => 'unique:users,email,'.$user->id);

$validator = Validator::make($input, $rules);

if ($validator->fails()) {
    return back()->withInput()->withErrors(['email']);
}

这工作得很好,但现在我希望它只在电子邮件已经存在并且从找到的记录中的列“function”=“client”时给出错误,但我不知道如何编码。

【问题讨论】:

  • @tR4xX 在 google 上搜索是否有人有解决方案,但我只是不知道在哪里以及如何将其放在 unique 子句中
  • 您的意思是只针对where function = 'client' 吗?
  • @VaibhavrajRoham 是的,现在它总是在电子邮件存在时给出错误,但如果列'function' = 'client',我不希望它给出错误
  • 你已经开始工作了吗?

标签: php laravel validation unique


【解决方案1】:

此时你应该使用强大的 Laravel 的验证。 根据文档:

验证中的字段在给定的数据库表中必须是唯一的。如果未指定列选项,将使用字段名称。

简单的规则:

unique:table,column,except,idColumn

代码:

$request->validate([
    'email' => 'unique:users,email_address,'.$request->get('id').',id'
]);

阅读更多: https://laravel.com/docs/5.3/validation#rule-unique

【讨论】:

    【解决方案2】:

    检查 Laravel 5.4 文档中的 Exist ruleUnique rule

    那么你可以简单地拥有:

    //Import Rule
    use Illuminate\Validation\Rule;
    
    ......
    
    $rules = array( 'email' => array( 'required', 
        Rule::unique('users')->where(function ($query) {
            $query->where('function','!=', 'client');
        })->ignore($user->id)
    ));
    
    $validator = Validator::make($input, $rules);
    

    我认为以上内容应该足够了,尽管我不能 100% 保证它符合您的期望,但我认为它应该向您展示缺少的内容。

    【讨论】:

      【解决方案3】:
      $count = User::where('email','=',request('email'))
              ->where('function','!=','client')
              ->count();
      
      if($count){
          return back()->withInput()->withErrors(['email' => 'Email Already Exist']);
      }
      

      上面的代码会做什么:

      统计邮箱为request_email且功能不是client的用户。

      如果$count 大于1,则表示重复email

      返回错误Email Already Exist

      【讨论】:

        猜你喜欢
        • 2014-10-26
        • 2017-11-20
        • 2018-07-26
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        相关资源
        最近更新 更多