php - 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?
谢谢您的帮助。
解决方案
如果您使用简单的文本框进行日期输入,我建议将其更改为某个日期选择器插件,这些插件确实具有显示与发送回数据库的日期格式不同的日期格式的功能。
之后可以去掉日期格式验证,因为它会由插件管理,并且unique会运行,因为插件发送的格式可以设置为MySQL格式(YYYY-MM-DD)
对于 jQuery UI 日期选择器 http://api.jqueryui.com/datepicker/#option-altFormat
推荐阅读
- sql - 如何索引 Col1 +'|' + Col2 用于最快的搜索
- logstash - Logstash - 解析 json 事件中的 json 数组
- java - 无法使用可嵌入 ID 创建新实体
- excel - Excel 宏来拉取谷歌图片链接
- android - 将本机代码作为项目的一部分时,Android Studio 3.2 无法调试
- javascript - 如何使用 Fragments 和 RecyclerView?
- c# - 导出到 Gridview 时为空的 excel 文件
- audio - Flutter (Dart):从麦克风获取/录制音频流并立即播放(实时)
- excel - 根据搜索条件创建行名列表
- symfony - Symfony 冒充另一个用户后获取原始用户