Как передать значение внутри модели для проверки в правилах

Я пытаюсь использовать эти правила в своей модели

'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` = allaudeen.s@gmail.coms and `id` <> 4) 

хотя я упомянул protected $primaryKey = 'DriverId';

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

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

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

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

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

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

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

 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));