php 即使使用请求中定义的格式,也会出现“无效的日期时间格式”

t3psigkw  于 2023-03-28  发布在  PHP
关注(0)|答案(1)|浏览(149)

在我的Laravel应用程序中,我有一个包含两列date的“事件”模型。在EventRequest.php文件中,我定义了如下规则:

public function rules(): array
    {
        return [
            "date_start" => ["date_format:d-m-Y", "required"],
            "date_end" => ["date_format:d-m-Y", "required"],
            "status" => ["required", "string", "in:open,closed"],
            "location_name" => ["required", "string", "max:100"],
            "location_description" => ["required", "string", "max:750"],
        ];
    }

然而,当我尝试创建一个新的Event,并将date_startdate_end的值设置为06-12-204007-12-2040时,我得到了以下错误:

"message": "SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '06-12-2040' for column 'date_start' at row 1 (Connection: mysql, SQL: insert into `events` (`date_start`, `date_end`, `status`, `location_name`, `location_description`, `updated_at`, `created_at`) values (06-12-2040, 07-12-2040, open, Test name 2, Test desc 2, 2023-03-24 22:53:16, 2023-03-24 22:53:16))",

有没有人能帮我解释一下我在这里漏掉了什么?这些不是正确的格式吗?
Postman截图:

zzoitvuj

zzoitvuj1#

保存到数据库的日期需要是Y-m-d,您正在传递d-m-Y。如果在保存之前将其解析为Carbon对象,则Laravel知道如何序列化该对象以正确保存。

$data = $request->validated();

$data['date_start'] = Carbon::createFromFormat('d-m-Y', $data['date_start']);
$data['date_end'] = Carbon::createFromFormat('d-m-Y', $data['date_end']);

$event = new Event();

$event->fill($data);

$event->save();

或者使用更标准的日期格式,使用Y-m-d可能不需要任何调整。

相关问题