在模型中,我创建了自定义时间戳:
const CREATED_AT = 'fil_ts';
const UPDATED_AT = 'fil_ts';
基本上的想法是,只要记录发生更改,CREATED_AT时间戳就会更新(换句话说:我只有一个时间戳,充当创建和更新的时间戳)。
如何使这些自定义时间戳通过迁移出现在数据库的表中?我创建表的时候需要在迁移文件中创建它们吗?
1。我需要像这样在迁移中定义自定义时间戳吗
$table->timestamp('fil_ts');
$table->timestamp('fil_ts');
2。或者像这样
$table->timestamps();
到目前为止,这些方法都不起作用。使用第一种方法时,我收到一个错误,即我不能具有相同的命名变量(这是合乎逻辑的,但我不知道如何使单个时间戳充当 CREATED_AT 和 UPDATED_AT 的其他方式)。
如果我使用第二种方法,它只会创建默认时间戳。
我的最终目标:单个自定义时间戳,其作用类似于created_at和updated_at。首先它获取创建时间戳,然后不断更新。
即使自定义时间戳名称不同,当我运行 php artisan migrate 时,我仍然会收到错误:
模型中的时间戳:
const CREATED_AT = 'file_created';
const UPDATED_AT = 'file_updated';
迁移中的时间戳:
$table->timestamp('file_created');
$table->timestamp('file_updated');
Doctrine\DBAL\Driver\PDOException::("SQLSTATE[42000]: 语法错误或 访问冲突:1067“file_updated”的默认值无效”)
模型中的代码: 需要禁用默认时间戳
public $timestamps = false;
const CREATED_AT = 'fil_ts';
const UPDATED_AT = 'fil_ts';
迁移中的代码
$table->timestamp('fil_ts');
在您的模型中,通过编写以下代码禁用默认时间戳。
public $timestamps = false;
要创建您自己的时间戳,请使用此代码。
这将创建一个时间戳列。
$table->timestamp('fil_ts');
从 Larval 8 开始,您可以使用此格式:
$table->timestamp('created_at');
这只会创建“created_at”列,而不是“updated_at”。