Laravel - 将日期发布为 JSON 并保存为 MySQL 中的 DATE 约束

Posted

技术标签:

【中文标题】Laravel - 将日期发布为 JSON 并保存为 MySQL 中的 DATE 约束【英文标题】:Laravel - POST date as JSON and save as DATE Constraint in MySQL 【发布时间】:2021-10-18 12:24:46 【问题描述】:

问题陈述:

我在 mysql Column DataType Constraint 数据库中定义了DATE 格式。

但是,在使用 Laravel Mass Assignment 和 all input data 的 MySQL 约束中以 ISO 格式发送 JSON 对象中的日期时,它必须是 DATE DataType

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '1990-01-01T00:00:00.000Z' for column 'date_of_birth' at row 1


文件和配置:

刀片文件

<input type="date" id="date_of_birth">

<script> 
    var dob = new Date( $("#date_of_birth").val() ).toISOString();
</script>

发布 JSON 对象


    date_of_birth: "1990-01-01T00:00:00.000Z"

批量分配的设置属性

App\Models\User.php

protected $fillable = [ 'date_of_birth' ]

App\Http\Controllers\UpdateController.php

    public function update(Request $request, User $user)
    

        $id = $user->updateOrCreate($request->all());

【问题讨论】:

无效的日期时间格式,那么,您在那里定义了什么日期格式?在日期列 date_of_birth 的数据库中。 我在数据库中定义了DATE格式。 这不是日期格式。这是一种数据类型。 你应该使用一个 mutator (laravel.com/docs/5.7/eloquent-mutators#defining-a-mutator)。 阅读this,不要将datetypedate format混为一谈。 【参考方案1】:

我想感谢@Armagen。使用mutator。

use Carbon\Carbon;

class User extends Model

    /**
     * Set the user's date_of_birth.
     *
     * @param  string  $value
     * @return void
     */
    public function setDateOfBirthAttribute($value)
    
        $this->attributes['date_of_birth'] = Carbon::parse($value);
    

【讨论】:

以上是关于Laravel - 将日期发布为 JSON 并保存为 MySQL 中的 DATE 约束的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 从 JSON 数组创建对象以将其保存在 SQL 数据库中

如何将 Laravel 输出的日期格式更改为 JSON?

将日期与laravel中mysql json数组的每个值进行比较

Laravel:在保存到数据库之前从 jQuery UI Datepicker 将 m/d/Y 转换为 Y-m-d

RestKit 无法将 JSON 请求中格式为字符串的日期保存到我的本地数据库

不将引导日期值保存到 Laravel 中的数据库表