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

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

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

Вышеуказанные правила должны проверить уникальный столбец, кроме идентификатора, который будет указан в 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';

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

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

0

Решение

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

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

Что касается правила проверки, так как ваше поле идентификатора не 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));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]