Laravel 5.2 Validator: ограничение проверки уникальных полей для конкретного пользователя

Я пытаюсь ограничить обязательный: уникальный валидатор в моем приложении Laravel 5.2 проверкой уникальности моего столбца "slug" только по результатам таблицы определенного user_id. Другими словами, ярлык должен быть уникальным, но только для каждого пользователя. У меня работает функция store() со следующим кодом:

'slug' => 'required|unique:contents,slug,NULL,id,user_id,' . Auth::id()

Это прекрасно работает. Однако я не могу заставить функцию update() работать так же, потому что я не могу заставить валидатор прекратить проверку уникальности по отношению к результату записи, которая в данный момент обновляется. Код, который я сейчас использую:

'slug' => 'required|unique:contents,slug,' . $content->slug . ',id,user_id,' . Auth::id()

Этот код мне не кажется правильным, но я пробовал несколько вариантов, и ни один из них не работает так, как хотелось бы. На мой взгляд, я думаю, что это сработает:

'slug' => 'required|unique:contents,id,' . $content->id . ',user_id,' . Auth::id()

Но это не так. Кто-нибудь знает, в чем моя проблема? Любое руководство будет высоко оценено.


person Luc Boone    schedule 18.08.2016    source источник
comment
Знаете ли вы, что во втором фрагменте кода у вас есть $content->slug, а не $content->id? Помимо этой незначительной ошибки, я ожидаю, что второй код будет работать.   -  person Jonathon    schedule 18.08.2016
comment
Да, я тоже не думаю, что вторая строка выглядит правильно, третья строка, а именно: 'slug' => 'required|unique:contents,id,' . $content-›id . ',id,user_id,' . Я ожидаю, что Auth::id() будет работать, но это не так. Это позволяет мне обновить слаг на тот, который уже существует для этого пользователя.   -  person Luc Boone    schedule 18.08.2016
comment
Последняя строка кода отсутствует ,id, возможно, поэтому она не работает. Попробуйте: 'required|unique:contents,id,' . $content->id . ',id,user_id,' . Auth::id()   -  person Jonathon    schedule 18.08.2016
comment
Плохо, Джонатан, я сделал опечатку в третьей строке своего вопроса. Однако правильная версия была в моем предыдущем комментарии. Правильный ответ был от Джоди ниже. Спасибо за вашу помощь!   -  person Luc Boone    schedule 19.08.2016


Ответы (1)


Трудно дать правильный ответ, не зная фактических имен атрибутов в вашей модели. Валидатор поддерживает следующие параметры

unique:{0},{1},{2},{3},{4},{5}

куда:

{0} = имя таблицы проверяется

{1} = имя столбца проверяется

{2} = значение идентификатора строки в {0} для пропуска проверки

{3} = имя столбца первичного ключа в {0}

{4} = имя дополнительного столбца фильтра в {0}

{5} = значение для дополнительного столбца фильтра

Итак, кажется, у нас есть значения для {0}, {1}, {2} и {5}. Из вашего вопроса я не уверен, каковы правильные значения для {3} и {4}. Если бы мне нужно было предположить, я бы написал правило валидатора следующим образом:

'slug' => 'required|unique:contents,slug,' . $content->id . ',id,user_id,' . Auth::id()
person Jody Boucher    schedule 18.08.2016
comment
Большое спасибо за определения параметров валидатора. Я таких нигде не видел, даже на сайте Laravel. Я получаю это сейчас. Спасибо еще раз! - person Luc Boone; 19.08.2016