首页 > 解决方案 > Laravel 5 不同日期格式的独特(数据库)验证

问题描述

我正在使用带有 MySQL 数据库的 laravel 5.5。

这是我当前的代码:

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;
}

来自客户的发布数据是 DD-MM-YYYY = '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 验证数据库唯一性的日期格式以使用 dmY 格式而不是 Ymd

谢谢您的帮助。

标签: phplaravellaravel-5.5

解决方案


如果您使用简单的文本框进行日期输入,我建议将其更改为某个日期选择器插件,这些插件确实具有显示与发送回数据库的日期格式不同的日期格式的功能。

之后可以去掉日期格式验证,因为它会由插件管理,并且unique会运行,因为插件发送的格式可以设置为MySQL格式(YYYY-MM-DD)

对于 jQuery UI 日期选择器 http://api.jqueryui.com/datepicker/#option-altFormat


推荐阅读