Laravel 合并created_at 和updated_at 时间戳

问题描述 投票:0回答:2

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

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'); 
php laravel eloquent timestamp migration
2个回答
4
投票

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

public $timestamps = false; 

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

这将创建一个时间戳列。

$table->timestamp('fil_ts'); 

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


0
投票

从 Larval 8 开始,您可以使用此格式:

$table->timestamp('created_at');

这只会创建“created_at”列,而不是“updated_at”。

© www.soinside.com 2019 - 2024. All rights reserved.