Laravel合并了created_at和updated_at时间戳

时间:2018-08-15 07:54:38

标签: php laravel eloquent timestamp migration

模型中,我创建了自定义时间戳记:

const CREATED_AT = 'fil_ts';
const UPDATED_AT = 'fil_ts';

基本上,想法是只要更改记录, CREATED_AT 时间戳就会更新(换句话说: :我只有一个时间戳,它充当创建和更新的时间戳 )。

如何使这些自定义时间戳出现在数据库表的槽迁移中?创建表时,是否需要在迁移文件中创建它们?


1。我是否需要像这样在迁移中定义自定义时间戳

$table->timestamp('fil_ts');
$table->timestamp('fil_ts');

2。或这样

$table->timestamps();

到目前为止,这些方法均无效。使用第一种方法时,出现一个错误,提示我不能具有相同的命名变量(这是逻辑上的,但是我不知道其他方法如何使SINGLE时间戳充当CREATED_AT和UPDATED_AT)。

如果我使用第二种方法,它只会创建默认时间戳。

我的最终目标:一个单独的自定义时间戳,其作用类似于created_at和Updated_at。首先,它获得创建时间戳,然后保持更新。


更新

即使自定义时间戳名称不同,运行php artisan migration时我仍然会出错:

模型中的时间戳:

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

1 个答案:

答案 0 :(得分:2)

在您的模型中,通过编写以下代码来禁用默认时间戳。

public $timestamps = false; 

要创建自己的时间戳,请使用此代码。

这将创建一个时间戳列。

$table->timestamp('fil_ts'); 

参考:https://laravel.com/docs/5.6/migrations