Php Laravel模式:默认为空,更新时的时间戳
我刚开始和拉威尔一起工作,所以我已经习惯了做事的方式 我一直在尝试做一些我在网上找不到的事情。我正在使用模式生成器创建一个新表 我想要的是一个datetime字段,默认值为NULL,但要有“更新当前_时间戳” 我已经尝试了很多方法,但这是我最近的一次尝试:Php Laravel模式:默认为空,更新时的时间戳,php,mysql,laravel,Php,Mysql,Laravel,我刚开始和拉威尔一起工作,所以我已经习惯了做事的方式 我一直在尝试做一些我在网上找不到的事情。我正在使用模式生成器创建一个新表 我想要的是一个datetime字段,默认值为NULL,但要有“更新当前_时间戳” 我已经尝试了很多方法,但这是我最近的一次尝试: $table->dateTime('opened_on')->default(Capsule::raw('NULL ON UPDATE CURRENT_TIMESTAMP')); 通过这段代码,我得到一个“opened_on的默
$table->dateTime('opened_on')->default(Capsule::raw('NULL ON UPDATE CURRENT_TIMESTAMP'));
通过这段代码,我得到一个“opened_on的默认值无效”错误
如果您有任何反馈或建议,我们将不胜感激。请勿重新发明轮子,使用内置的Laravel功能。只需添加
->timestamps()
,它将在和列中创建已创建和已更新。当您使用Eloquent更新数据时,Laravel会将当前日期和时间设置为
列中的updated_。此外,
处更新的\u将自动转换为碳实例
(查看时间戳部分)在laravel中使用
您必须通过创建数据库表。对我来说,创建一个默认设置为NULL的datetime字段,然后用PHP更新时间戳比让MySQL更新更容易。
您可以为此使用mutators。我通常使用以下语法进行迁移:
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
“胶囊”部分是Laravel在我正在使用的应用程序中的使用方式。“胶囊”部分可能就是打破这一点的原因。我对一个建议改用DB::raw()
的答案投了赞成票,这对我来说很有效。我不确定这是否对我正在尝试的工作有效。我想要第一次打开某物的日期和时间。数据库记录是提前创建的,因此“created_at”记录不是我需要的,虽然其他记录值可以在将来更新,但日期时间不应该更改,因此“updated_at”似乎也不是我需要的,因为更新可以继续发生在同一行中的其他字段上,但我不想更改日期时间。如何将默认值设置为NULL?如果在NULL上调用成员函数default(),则不起作用
ALTER TABLE tbl MODIFY `opened_on` DATE DEFUALT NULL;
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));