我是Laravel的新人。我尝试制作个人资料更新页面...一切正常但如果我尝试应用规则来设置电子邮件字段唯一:用户我在用户尝试更新示例名称时遇到问题并且不想要更改电子邮件。
public function rules()
{
return [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
];
}
我希望限制该用户使用其他人正在使用的相同电子邮件...但我想忽略它,如果这个用户个人资料中已经存在相同的电子邮件且他不想要改变这一点。
public function updateData(UpdateDataRequest $ request){
DB::table('users')
->where('id', Auth::user()->id)
->update(array('email' => $request->email, 'name' => $request->name));
return redirect('panel');
}
如何正确做到?
答案 0 :(得分:11)
这种确切的情况在文档中用作示例。
https://laravel.com/docs/5.2/validation#rule-unique
强制使用唯一规则忽略给定ID:
有时,您可能希望在唯一检查期间忽略给定的ID。例如,考虑一个“更新配置文件”屏幕,其中包括用户的名称,电子邮件地址和位置。当然,您需要验证电子邮件地址是否唯一。但是,如果用户仅更改名称字段而不更改电子邮件字段,则不希望抛出验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供已由其他用户使用的电子邮件地址,您只想抛出验证错误。要告诉唯一规则忽略用户的ID,您可以将ID作为第三个参数传递:
'email' => 'unique:users,email_address,'.$user->id
如果您的表使用除id之外的主键列名称,则可以将其指定为第四个参数:
'email' => 'unique:users,email_address,'.$user->id.',user_id'
答案 1 :(得分:0)
在新版本中。 laravel
使用“规则”忽略任何用户或记录
https://laravel.com/docs/5.7/validation#rule-unique
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
$user->id
可以是特定ID或登录的当前用户ID
答案 2 :(得分:-1)
试试这个验证(Laravel 8.x)
'email' => ['email:rfc','confirmed','unique:App\Models\User,email'],