Laravel 合并 created_at 和 updated_at 时间戳

Posted

技术标签:

【中文标题】Laravel 合并 created_at 和 updated_at 时间戳【英文标题】:Laravel make merged created_at and updated_at timestamps 【发布时间】:2019-01-22 02:34:04 【问题描述】:

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

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

基本上这个想法是 CREATED_AT 时间戳将在记录更改时更新(换句话说:我将只有一个时间戳作为创建和更新的时间戳 em>)。

如何使这些自定义时间戳出现在数据库的表中通过迁移?我创建表的时候需要在迁移文件中创建它们吗?


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

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

2。或者像这样

$table->timestamps();

到目前为止,这些方法都没有奏效。使用第一种方法,我得到一个错误,我不能有相同的命名变量(这是合乎逻辑的,但我不知道如何让 SINGLE 时间戳充当 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'); 

【问题讨论】:

【参考方案1】:

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

public $timestamps = false; 

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

这将创建一个时间戳列。

$table->timestamp('fil_ts'); 

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

【讨论】:

谢谢!我从来没有想过我需要禁用时间戳才能让自定义名称正常工作!.. 接受这是答案,以便其他人也觉得它有帮助。

以上是关于Laravel 合并 created_at 和 updated_at 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中 created_at 和 updated_at 列的优点是啥

laravel - 从数据库中删除 updated_at 和 created_at 列后,laravel 尝试插入它们

Laravel 自定义 created_at 和 updated_at

created_at 列中的时间不正确 - Laravel 5.4

分页 Laravel 集合

Laravel 在 created_at 等所有模型上添加列值的方法