Я использую laravel 5.5 с базой данных MySQL.
Вот мой текущий код:
private function setValidationRule(Request $request,$actionCode) {
$rules = [];
$rules['odaydate'] = 'required|unique:empofday|date_format:"d-m-Y"';
return $rules;
}
public function postCreate(Request $request) {
//Previous code...
$validator = \Validator::make($request->all(),
$this->setValidationRule($request,$actionCode),
$this->setCustomValidationRuleMsg($request,$actionCode)
);
$validator->setAttributeNames($this->setValidationAttributeNames());
if ($validator->fails()) {
$view = $viewPri->withErrors($validator)->withInput();
} else {
$view = $viewSec;
}
return $view;
}
Данные публикации от клиента: ДД-ММ-ГГГГ = '15 -10-2018 '.
Затем я хочу проверить уникальность даты с помощью правила: $rules['odaydate'] = 'required|unique:empofday|date_format:"d-m-Y"';
Да, проверка верна (успех), но сгенерированный laravel sql был неправильным, чтобы получить уникальность: select count(*) as aggregate from empofday where odaydate = '15-10-2018'
поэтому результирующий sql будет 0 вместо 1.
Но если я попробую ручной sql со следующим кодом: select count(*) as aggregate from empofday where odaydate = '2018-10-01'
итоговое значение 1.
Итак, мой вопрос: как установить формат даты для laravel, проверяющего уникальность в базе данных, на используйте формат d-m-Y вместо Y-m-d?
Спасибо за помощь.
О да, забыл сказать, я использую MySQL. Я обновлю свой вопрос.






Если вы используете простое текстовое поле для ввода даты, я рекомендую заменить его на какой-нибудь плагин выбора даты, плагины действительно имеют функциональность, позволяющую отображать формат даты, отличный от того, который отправляется обратно в базу данных.
После этого вы можете удалить проверку формата даты, потому что она будет управляться плагином, и будет запускаться unique, потому что формат, отправленный плагином, может быть установлен в формате MySQL (ГГГГ-ММ-ДД)
Для средства выбора даты пользовательского интерфейса jQuery http://api.jqueryui.com/datepicker/#option-altFormat
Спасибо за ответ. Итак, в третьем пункте, следует ли мне запрашивать базу данных вручную или по-прежнему использовать проверку laravel? Если все еще используется проверка laravel, как преобразовать значение даты $ request до проверки?
Я думал, что вы получаете ошибку при выполнении запроса, но теперь я понимаю, что вы получаете ошибку при проверке, позвольте мне проверить, что можно сделать.
Вы используете unique: empofday, попробуйте unique: empofday, odaydate
Нет проверки на успешный уникальный запуск. Но результат всегда 0, что означает, что уникальный не может найти повторяющееся значение. (Я уже объяснял sql, созданный laravel в моем вопросе выше)
Используете ли вы простое текстовое поле для ввода даты, если да, я рекомендую изменить это на какой-нибудь плагин выбора даты, плагины действительно имеют функциональность, позволяющую отображать формат даты, отличный от того, который отправляется обратно в базу данных.
после этого вы можете удалить проверку формата даты, потому что она будет управляться плагином, а uinque будет запущен, потому что формат, отправленный плагином, может быть установлен в формате mysql.
Это с моей стороны, если вы сочтете этот пост полезным, вы можете проголосовать за него, он был полезен, и если он решил вашу проблему, вы можете принять его. Я собираюсь отредактировать его как последний комментарий
Хм .. Я уже использую плагин datepicker, но внутри моего приложения все значения всегда сохраняют формат даты ДД-ММ-ГГГГ. Моя цель состояла в том, чтобы найти способы изменить уникальный формат даты проверки laravel при проверке. В качестве обходного пути я попробую ваше предложение разместить на сервере другой формат, чем тот, который он показал пользователю. Спасибо за помощь.
какую базу данных вы используете?