Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel模式:默认为空,更新时的时间戳_Php_Mysql_Laravel - Fatal编程技术网

Php Laravel模式:默认为空,更新时的时间戳

Php Laravel模式:默认为空,更新时的时间戳,php,mysql,laravel,Php,Mysql,Laravel,我刚开始和拉威尔一起工作,所以我已经习惯了做事的方式 我一直在尝试做一些我在网上找不到的事情。我正在使用模式生成器创建一个新表 我想要的是一个datetime字段,默认值为NULL,但要有“更新当前_时间戳” 我已经尝试了很多方法,但这是我最近的一次尝试: $table->dateTime('opened_on')->default(Capsule::raw('NULL ON UPDATE CURRENT_TIMESTAMP')); 通过这段代码,我得到一个“opened_on的默

我刚开始和拉威尔一起工作,所以我已经习惯了做事的方式

我一直在尝试做一些我在网上找不到的事情。我正在使用模式生成器创建一个新表

我想要的是一个datetime字段,默认值为NULL,但要有“更新当前_时间戳”

我已经尝试了很多方法,但这是我最近的一次尝试:

$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'));