2015-01-29 4 views
0

Я пытаюсь иметь эти правила в моей моделиКак передать значение внутри модели для проверки в правилах

'Email' => 'email|unique:tablename,coloumntoignore,ignoreid', 

Приведенные выше правила, чтобы проверить уникальный coloumn, кроме идентификатора, поставляемые в ignoreid

сталкивается две проблем здесь

Я получаю ввод данных пользователя

$DriverData = Input::except(array('_token')); 

и отправить его в модель

$validation = Validator::make($DriverData, DriverModel::$updaterules); 

Примечание: Это обновление не самость, так что я не могу получить его Auth::user()->id и мой первичный ключ не id

проверить его

'Email' => 'email|unique:driver_details,email,4', 

Он сказал мне ошибки

Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from `driver_details` where `email` = [email protected] and `id` <> 4) 

т поджилки я упомянул protected $primaryKey = 'DriverId';

Итак, как я могу иметь получить значение поля внутри модели, так что я должен проверить для правила, чтобы проверить уникальное coloumn за исключением одной его

Примечания: Грязные так как включение DriverId в сеанс на контроллере и получение здесь вроде этого не является предпочтительным.

ответ

1

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

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

Что касается правила проверки, так как ваше поле id не равно id, вам нужно сообщить правилу это. Четвертым параметром уникального правила является имя поля id. Документация по уникальному правилу: here.

'Email' => 'email|unique:driver_details,email,4,DriverId', 

После того, как вы выяснить, как вы получаете идентификатор записи, которую вы обновляете, вам необходимо выяснить, как вводить этот идентификатор в вашей электронной почты правила. Поскольку похоже, что ваши правила определены как статический атрибут на DriverModel, вы можете взглянуть на этот вопрос/ответ here. В принципе, вы будете нуждаться в заполнителе в правиле, а затем статический метод на модели, которая может заменить заполнитель с указанным идентификатором:

class DriverModel extends Eloquent { 
    public static $updaterules = array(
     'Email' => 'email|unique:driver_details,email,%1$s,DriverId' 
    ); 
    public static function getUpdateRules($id = 'NULL') { 
     $rules = self::$updaterules; 
     $rules['Email'] = sprintf($rules['Email'], $id); 
     return $rules; 
    } 
} 

// usage 
$validation = Validator::make($DriverData, DriverModel::getUpdateRules($id)); 
+1

Спасибо я преодолеть '«Email»=>«по электронной почте | уникальные : driver_details, email, 4, DriverId ', 'Но даже я использую getUpdateRule, в то время как я использую' $ validation = Validator :: make ($ DriverData, DriverModel :: getUpdateRules ($ id)); 'в контроллере я получаю 'Undefined variable: getUpdateRules' error –

+0

Возможно, у вас есть опечатка. Убедитесь, что вы используете 'DriverModel :: getUpdateRules ($ id)', а не 'DriverModel :: $ getUpdateRules ($ id)'. Перед функцией не должно быть '$'. – patricus

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

  • Нет связанных вопросов^_^