Laravel 5.4验证独特的问题

时间:2017-02-22 08:55:06

标签: php laravel validation unique

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

scramble()

这完全正常,但现在我想要它只会在电子邮件已经存在时发出错误并且从找到的记录中找到'function'='client'列,但我不知道如何对此进行编码。

3 个答案:

答案 0 :(得分:1)

从Laravel 5.4 doc检查Exist ruleUnique rule

enter image description here

然后你可以简单地拥有:

//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%确保它符合您的期望,但我认为它应该向您展示缺少的内容。

答案 1 :(得分:0)

$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

答案 2 :(得分:0)

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

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

简单地说:

唯一:表,列,除了,idColumn

代码:

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

了解更多: https://laravel.com/docs/5.3/validation#rule-unique