2015-10-20 3 views
0

Я хочу проверить, что поле name в таблице базы данных pools уникально. Когда я создаю новую запись, это работает отлично:Laravel условный проверка подлинности уникальности не работает

$rules = [ 
    'name' => 'required|unique:pools' 
]; 

Однако, когда я хочу, чтобы обновить существующую запись, то уникальность проверка должна пропустить этот пункт обновляемого (как, очевидно, название может быть без изменений). Поэтому я выкопался и нашел этот вариант:

$rules = [ 
    'name' => 'required|unique:pools,id,1' 
]; 

Где 1 - это идентификатор записи, которую я обновляю. Это, похоже, решило проблему, но затем я протестировал с другим ID (в этом случае валидатор должен вернуть ошибку), но он по-прежнему позволяет добавить новую запись с тем же name.

Например, если я

$rules = [ 
    'name' => 'required|unique:pools,id,4' 
]; 

где 4 представляет собой идентификатор совершенно другой записи в БД (или даже идентификатор, который не существует вообще), уникальность проверка не работать и позволяет мне делать столько дубликатов записей, сколько захочу. Казалось бы, добавление любого идентификатора к указанному выше правилу заставляет валидатор игнорировать все совпадения в БД, кроме только одного с данным ID.

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

Laravel 4 Validation unique(database) ignore current

Любого раствором?

ответ

1

Второй параметр это поле, то, что вы ищете быть уникальным. Измените id, чтобы назвать. Третий параметр - это идентификатор, который должен пропустить поиск.

$rules = [ 
    'name' => 'required|unique:pools,mame,4' 
]; 
1

вы делаете глупые ошибки, попробуйте это

$rules = [ 
'name' => 'required|unique:pools,name,4' 
]; 
+0

Ха-ха, это было быстро :) – Iamzozo

+0

вы правы @lamzozo –

+0

я вижу. Глупо. Я приму ответ, который пришел на 2 секунды раньше, я думаю, так как они оба одинаковы. – jovan

Смежные вопросы