Как игнорировать данный идентификатор во время проверки

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? Или вы передаете user_id с запросом?

iamab.in 18.05.2018 18:46

да, я пытаюсь изменить имя пользователя этого пользователя

Agil 18.05.2018 18:47

Можете показать контроллер и форму?

iamab.in 18.05.2018 18:49

хорошо, я могу, но ты не думаешь, что это сбивает с толку?

Agil 18.05.2018 18:50

Как получить объект $ user? [Мы можем уменьшить количество комментариев, если вы добавляете код]

iamab.in 18.05.2018 18:52

да, просто добавил все, что тебе нужно

Agil 18.05.2018 18:57

Кстати, можете проголосовать за мой вопрос? Таким образом, у меня будет больше шансов решить эту проблему

Agil 18.05.2018 18:59

Попробуйте сменить $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)] ]);

iamab.in 18.05.2018 19:23

Я не думаю, что есть веская причина для голосования за. [Также нет голосование против]

iamab.in 18.05.2018 19:39

По какой-то причине некоторое время назад отключилось электричество. я попробую, как только он вернется. Извини, что заставил тебя ждать

Agil 18.05.2018 19:41

@ab_ab Пробовал, ничего не меняется

Agil 18.05.2018 21:25

Код ypur выдает ошибку «Проверка метода не существует», это самая странная вещь, которую я когда-либо видел

Agil 18.05.2018 21:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
12
385
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы пытаетесь гарантировать уникальный адрес электронной почты, правило будет следующим:

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

Я просто попробовал то, что вы здесь дали, и ничего не изменилось. Кстати, я не вижу разницы между этим и кодом, который я дал выше.

Agil 18.05.2018 21:24

Тогда вы сделали это неправильно, вы не обернули свои правила в массив [], они должны быть массивом

Fireynis 18.05.2018 21:25

@Nikonah Я обновил свой ответ кодом, который вы использовали бы в зависимости от того, что было в вашем контроллере в вашем вопросе

Fireynis 18.05.2018 21:41

Что ж, это отлично работает, спасибо за помощь. Я очень ценю это.

Agil 18.05.2018 22:14

Но я до сих пор не знаю, в чем была ошибка, возможно, потому, что я не заключил ее в скобки.

Agil 18.05.2018 22:14

@Nikonah было несколько проблем: 1 это требовалось, а max должен быть отдельным, 2 состоял в том, что все правила, следующие за именем пользователя, должны были быть в массиве, 3 заключались в том, что у вас был пользователь вместо пользователей, имя таблицы всегда во множественном числе от модели, если это не переопределено с помощью $ tablename в модели.

Fireynis 18.05.2018 23:33

Другие вопросы по теме