Laravel 5 уникальная проверка (база данных) с другим форматом даты

Я использую 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?

Спасибо за помощь.

какую базу данных вы используете?

usmanhaq 27.10.2018 13:04

О да, забыл сказать, я использую MySQL. Я обновлю свой вопрос.

Zemmy Indrapatih 27.10.2018 13:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
637
1

Ответы 1

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

После этого вы можете удалить проверку формата даты, потому что она будет управляться плагином, и будет запускаться unique, потому что формат, отправленный плагином, может быть установлен в формате MySQL (ГГГГ-ММ-ДД)

Для средства выбора даты пользовательского интерфейса jQuery http://api.jqueryui.com/datepicker/#option-altFormat

Спасибо за ответ. Итак, в третьем пункте, следует ли мне запрашивать базу данных вручную или по-прежнему использовать проверку laravel? Если все еще используется проверка laravel, как преобразовать значение даты $ request до проверки?

Zemmy Indrapatih 27.10.2018 14:32

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

usmanhaq 27.10.2018 15:08

Вы используете unique: empofday, попробуйте unique: empofday, odaydate

usmanhaq 27.10.2018 15:12

Нет проверки на успешный уникальный запуск. Но результат всегда 0, что означает, что уникальный не может найти повторяющееся значение. (Я уже объяснял sql, созданный laravel в моем вопросе выше)

Zemmy Indrapatih 27.10.2018 15:56

Используете ли вы простое текстовое поле для ввода даты, если да, я рекомендую изменить это на какой-нибудь плагин выбора даты, плагины действительно имеют функциональность, позволяющую отображать формат даты, отличный от того, который отправляется обратно в базу данных.

usmanhaq 27.10.2018 16:45

после этого вы можете удалить проверку формата даты, потому что она будет управляться плагином, а uinque будет запущен, потому что формат, отправленный плагином, может быть установлен в формате mysql.

usmanhaq 27.10.2018 16:47

Это с моей стороны, если вы сочтете этот пост полезным, вы можете проголосовать за него, он был полезен, и если он решил вашу проблему, вы можете принять его. Я собираюсь отредактировать его как последний комментарий

usmanhaq 27.10.2018 17:17

Хм .. Я уже использую плагин datepicker, но внутри моего приложения все значения всегда сохраняют формат даты ДД-ММ-ГГГГ. Моя цель состояла в том, чтобы найти способы изменить уникальный формат даты проверки laravel при проверке. В качестве обходного пути я попробую ваше предложение разместить на сервере другой формат, чем тот, который он показал пользователю. Спасибо за помощь.

Zemmy Indrapatih 27.10.2018 18:26

Другие вопросы по теме