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