在 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 迁移中更改日期格式的主要内容,如果未能解决你的问题,请参考以下文章