Я пытаюсь использовать эти правила в своей модели
'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));