【问题标题】:why does laravel migration's timestapce('my_col_name') returns Syntax error or access violation: 1067 Invalid default value for 'my_col_name'为什么 laravel 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效
【发布时间】:2019-07-15 08:48:10
【问题描述】:

在我的迁移中,我有两个额外的时间戳

$table->timestamp('starts_at');

$table->timestamp('ends_at');

我不希望它们可以为空,问题是,当我运行 php artisan migrate 我回来了

语法错误或访问冲突:1067 'ends_at' 的默认值无效

我在底部有 $table->timestamps() 。 如何让我的自定义时间戳列/s 不能为空

一种解决方法是简单地将 nullable() 放在最后,但它不是一个修复。使用 laravel 5.7

【问题讨论】:

  • 表中是否已有记录?如果是这样,您要么需要使这些时间戳为空,设置默认值,要么清空表然后迁移。
  • 我在那个表中没有数据,它是在运行 php artisan make:migration my_migration_name 之后的新迁移
  • 你可以用“dateTime”代替“timestamp”吗?

标签: laravel


【解决方案1】:

我希望您正在寻找该字段的日期时间数据类型。 试试下面的代码。

$table->datetime('starts_at');
$table->datetime('ends_at');

如果您想将此字段设为可为空,请尝试以下操作。

$table->dateTime('starts_at')->nullable();
$table->dateTime('ends_at')->nullable();

【讨论】:

  • 正如我之前所说,我知道使用 nullable() 的方法我不想要破解,我想要一个解决方案或回答为什么它不起作用。
【解决方案2】:

你应该试试这个:

 $table->timestamp('starts_at');

 $table->timestamp('ends_at')->default('0000-00-00 00:00:00');

【讨论】:

  • OP 说使用 default() 不是他想要的,所以我假设你没有阅读完整的问题。
猜你喜欢
  • 2021-07-21
  • 2021-04-15
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2021-05-24
  • 1970-01-01
  • 2018-02-06
相关资源
最近更新 更多