Php Laravel unique规则集忽略当前用户id
我正在更新Laravel中的一个用户,在那里我为更新用户电子邮件制定了以下验证规则:Php Laravel unique规则集忽略当前用户id,php,laravel,Php,Laravel,我正在更新Laravel中的一个用户,在那里我为更新用户电子邮件制定了以下验证规则: "email" => "required|email|unique:users,email,".$this->route("user")->id, 这是我的申请表。 然而,当我发帖时,它仍然说电子邮件已经被接收了?这可能是Laravel最新版本中的一个bug吗 谢谢 不,这不是一个bug,您正在为id使用空值。因此,请将规则更改为: "email" => "required|e
"email" => "required|email|unique:users,email,".$this->route("user")->id,
这是我的申请表。
然而,当我发帖时,它仍然说电子邮件已经被接收了?这可能是Laravel最新版本中的一个bug吗
谢谢 不,这不是一个bug,您正在为id使用空值。因此,请将规则更改为:
"email" => "required|email|unique:users,email,".$this->user()->id,
确保您的方法中有Request$Request,并且控制器上有auth中间件。您设置了ignore email列,因此应该传递email而不是id
"email" => "required|email|unique:users,email,".$this->route("user")->email,
首先,您必须在用户模型中添加规则
static function rules() {
return [
'email' => 'required|email'
];
}
在用户控制器中
use Illuminate\Validation\Rule; // add this one
function add_update_user(Request $request,$user_id) {
$data = $request->all();
unset($data['_token']);
$rules = User::rules();
$rules['email'] = explode('|', $rules['email']);
if (isset($user_id)) // is old user, your get user_id in route
{
$rules['unique_code'][] = Rule::unique('databse_connection_name.users')->ignore($data['email'], 'email');
} else // is new user
{
$rules['email'][] = 'unique:databse_connection_name.users,email';
}
$validator = Validator::make($data, $rules);
...
...
}
我错了,规则是在表单请求中!我应该说明的!Sorrydd$this->routeuser->id显示了正确的值?您还没有向我们显示您用于访问此验证的路由,但是如果它类似于users/{user},那么表单请求中可用的用户id实际上是$this->routeuser,而不是$this->routeuser->id。