gpt4 book ai didi

php - Yii2 : Add ON UPDATE CURRENT_TIMESTAMP attribute

转载 作者:可可西里 更新时间:2023-11-01 08:08:54 33 4
gpt4 key购买 nike

我正在扩展 yii\db\Migration 类以添加一个方法 timestamps 这将加快我创建迁移的速度。它将在我将创建的每个迁移中添加我需要的所有时间戳。

我在 Laravel 和 CakePHP 框架中看到过这个功能,我很好奇为什么 Yii 2 迁移工具默认不提供这个功能。

我尝试了以下方法:

namespace custom\db;

use \yii\db\Migration as YiiMigration;

class Migration extends YiiMigration
{
public function timestamps($tableName)
{
$this->addColumn(
$tableName,
'created_at',
$this->timestamp()->null()->defaultExpression('CURRENT_TIMESTAMP')
);

$this->addColumn(
$tableName,
'updated_at',
$this->timestamp()->null()
);

$this->addColumn(
$tableName,
'deleted_at',
$this->timestamp()->null()->defaultExpression('NULL')
);
}
}

在我使用 upsafeUp 方法进行的实际迁移中,我执行以下操作:

public function safeUp()
{
$this->createTable('test', [
'id' => 'pk',
]);

$this->timestamps('test');
}

当我运行它时,字段 created_atdeleted_at 获得指定的类型和默认值。 created_at 可以为 null,但它的默认值为 CURRENT_TIMESTAMPdeleted_at 可以为 null,它的默认值为 NULL

updated_at 字段有问题。我不知道如何使用 Yii 2 迁移为该字段设置属性,我需要设置:ON UPDATE CURRENT_TIMESTAMP 属性,该属性在更新记录时始终会更改值。

现在,这更进一步。当我仅使用 created_at 字段和以下选项测试此功能时,该字段将始终获得属性 ON UPDATE CURRENT_TIMESTAMP:

$this->addColumn(
$tableName,
'created_at',
$this->timestamp()
);

是的,该字段不可为 null,它包含我需要的属性。这仍然不是我所需要的,因为我需要字段可为空,后跟该属性。

最后,最糟糕的部分......

我已尝试为 updated_at 执行以下操作,希望它会遵循 created_at 发生的情况:

$this->addColumn(
$tableName,
'updated_at',
$this->timestamp()
);

现在表中的默认值为:0000-00-00 00:00:00 并且它不可为空。

这里发生了什么,我已经没有任何线索了。

我在这里做错了什么以及如何做对?

最佳答案

您需要使用 ->defaultValue(null) 显式设置默认值,然后您需要使用 ->append('ON UPDATE CURRENT_TIMESTAMP')对于 $type 参数,采用以下方式,

$this->addColumn(
$this->_table,
'updated_at',
$this->timestamp()->defaultValue(null)->append('ON UPDATE CURRENT_TIMESTAMP')
);

上面将向您显示 phpmyadmin 中的字段,如下所示

enter image description here

查看这些讨论- https://github.com/bizley/yii2-migration/issues/6

关于php - Yii2 : Add ON UPDATE CURRENT_TIMESTAMP attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53823120/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com