Laravel 5具有不同日期格式的独特(数据库)验证

时间:2018-10-27 07:06:18

标签: php laravel laravel-5.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;
}

来自客户端的发布数据为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验证数据库唯一性的日期格式,以便使用d-m-Y格式而不是Y-m-d

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

此后,您可以删除日期格式验证,因为它将由插件管理,并且将运行唯一性,因为可以将插件发送的格式设置为MySQL格式(YYYY-MM-DD)

对于jQuery UI Date Picker     http://api.jqueryui.com/datepicker/#option-altFormat