Do not down vote this question, I know it has been asked before but, I couldn't find any with working answer!
Я пытаюсь создать уникальный адрес электронной почты, но игнорирую данный идентификатор во время проверки. Пробовал несколько способов сделать это, вот два из них, которые были многообещающими, не сработали:
Validator::make($request->all(), [
'username' => ['username', Rule::unique('user', 'username')->ignore($user->id)]
]);
Еще один:
'username' => 'required|max:30,',
Rule::unique('user')->ignore($user->id),
спасибо за помощь.
Это дополнительная информация на тот случай, если вы считаете, что приведенные ниже примеры должны определенно работать. Форма:
<input type = "text" name = "username" class = "formClasses" id = "usernameLocal"
value = "{{ Auth::user()->username }}">
Контроллер:
public function saveUserChanges(Request $request){
$user = Auth::user();
$this->validate($request, [
'username' => 'required|max:30,',
Rule::unique('user')->ignore($user->id)
]);
$user->username = $request['username'];
$user->update();
return redirect()->route('userProfil', $user->userprofile->slug);
}
да, я пытаюсь изменить имя пользователя этого пользователя
Можете показать контроллер и форму?
хорошо, я могу, но ты не думаешь, что это сбивает с толку?
Как получить объект $ user? [Мы можем уменьшить количество комментариев, если вы добавляете код]
да, просто добавил все, что тебе нужно
Кстати, можете проголосовать за мой вопрос? Таким образом, у меня будет больше шансов решить эту проблему
Попробуйте сменить $this->validate($request, ['username' => 'required|max:30,',Rule::unique('user')->ignore($user->id)]); на $request->validate(['username' => ['required', 'max:30', Rule::unique('users')->ignore($user->id)] ]);
Я не думаю, что есть веская причина для голосования за. [Также нет голосование против]
По какой-то причине некоторое время назад отключилось электричество. я попробую, как только он вернется. Извини, что заставил тебя ждать
@ab_ab Пробовал, ничего не меняется
Код ypur выдает ошибку «Проверка метода не существует», это самая странная вещь, которую я когда-либо видел






Если вы пытаетесь гарантировать уникальный адрес электронной почты, правило будет следующим:
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
Если ваше поле не email в вашей таблице пользователей, сделайте следующее:
Validator::make($data, [
'email' => [
'required',
Rule::unique('users', 'column_name')->ignore($user->id),
],
]);
Наконец, если ваш уникальный идентификатор в таблице пользователей не id, выполните:
Validator::make($data, [
'email' => [
'required',
Rule::unique('users', 'column_name')->ignore($user->id, 'unique_key_name'),
],
]);
Чтобы использовать ваш код напрямую, он будет выглядеть так:
$this->validate($request, [
'username' => [
'required',
'max:30',
Rule::unique('users')->ignore($user->id)
]
]);
Внесенные мной изменения были обязательными, и максимальное правило должно быть разделено, а все правила должны быть в массиве. Я также изменил таблицу с user на users, поскольку это значение по умолчанию для Laravel.
См. Документацию на https://laravel.com/docs/master/validation#rule-unique
Я просто попробовал то, что вы здесь дали, и ничего не изменилось. Кстати, я не вижу разницы между этим и кодом, который я дал выше.
Тогда вы сделали это неправильно, вы не обернули свои правила в массив [], они должны быть массивом
@Nikonah Я обновил свой ответ кодом, который вы использовали бы в зависимости от того, что было в вашем контроллере в вашем вопросе
Что ж, это отлично работает, спасибо за помощь. Я очень ценю это.
Но я до сих пор не знаю, в чем была ошибка, возможно, потому, что я не заключил ее в скобки.
@Nikonah было несколько проблем: 1 это требовалось, а max должен быть отдельным, 2 состоял в том, что все правила, следующие за именем пользователя, должны были быть в массиве, 3 заключались в том, что у вас был пользователь вместо пользователей, имя таблицы всегда во множественном числе от модели, если это не переопределено с помощью $ tablename в модели.
Вы пытаетесь обновить $ user? Или вы передаете user_id с запросом?