Я пытаюсь иметь эти правила в моей модели
'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 в сеанс на контроллере и получение здесь такого, не является предпочтительным.
Если вы используете находчивые маршруты / контроллер, идентификатором записи, которую вы пытаетесь обновить, должен быть параметр, передаваемый методу обновления в контроллере.
Если вы не используете ресурсоемкие маршруты / контроллеры, тогда необходимо передать идентификатор обновляемой записи вместе с другими данными формы.
Что касается правила проверки, так как ваше поле идентификатора не 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));
Других решений пока нет …