在 Laravel 迁移中更改日期格式

Posted

技术标签:

【中文标题】在 Laravel 迁移中更改日期格式【英文标题】:Change date format in Laravel migration 【发布时间】:2020-05-02 14:10:27 【问题描述】:

我想直接从迁移中将日期格式从 1990-01-30 更改为 30/01/1990。当我尝试从工厂播种迁移时出现以下错误。

日期时间格式无效:1292 日期值不正确:“30/01/1990” 第 1 行的“dob”列

public function up()

    Schema::create('users', function (Blueprint $table) 
        $table->bigIncrements('id');
        $table->string('fname');
        $table->string('lname');
        $table->string('phone')->unique();
        $table->date('dob')->format('d/m/Y');
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    );

【问题讨论】:

格式化日期通常在应用层完成——绝对不在数据库中。我很确定至少没有办法在 mysql 中指定日期 col 的格式。在the Laravel migration docs 中也没有提到format() 修饰符。我的猜测是您的format() 只是被忽略了,并且正在创建一个正常的date col。最好的解决方案是cast your date to the format you want。 【参考方案1】:

在模型中声明:

class ModelName extends Model
      

 protected $casts = [
    'created_at' => 'datetime:d/m/Y', // Change your format
    'updated_at' => 'datetime:d/m/Y',
];

【讨论】:

【参考方案2】:

您不能在迁移中这样做。您将需要使用 Carbon 并在模型中格式化日期。

【讨论】:

我在我的工厂使用了这个'dob' => Carbon::createFromFormat('d/m/Y', '01/01/1990')->format('d/m/Y'),。这可以更改工厂中的日期格式,但数据库的结构仍然保持这种格式(Y-m-d),因此出现此错误Invalid datetime format: 1292 Incorrect date value: '30/01/1990' for column 'dob' at row 1

以上是关于在 Laravel 迁移中更改日期格式的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()

更改 laravel 视图页面中的日期格式

Laravel如何更改列表中的日期格式

更改默认日期格式 laravel sql 查询

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

Windows2008R2 IIS7日期时间格式更改