YII迁移和表列的默认值

5
public function up(){

        $this->createTable('POST', array(
            'id' => 'pk',
            'isremoved' => 'integer NOT NULL',
            'removaldate' => 'timestamp NULL',
            'post' => 'text NOT NULL',
            'creationdate' => 'timestamp NOT NULL',
        ));
}

这是迁移的up函数。如您所见,它是用于创建新表的查询语句。默认情况下,YII将时间戳列的默认值设置为CURRENT_TIMESTAMP,并创建附加参数并将其设置为ON UPDATE CURRENT_TIMESTAMP。

我不需要时间戳的当前值,也不需要在更新行时更新此列。我应该怎么做?顺便说一下,您正在使用MySQL。

3个回答

6
对于像我一样使用谷歌的用户:Yii2现在已经默认支持此功能了。
现在你可以在你的定义中添加->defaultExpression('CURRENT_TIMESTAMP')

1
利用MySQL创建表脚本:
show create table tablename

这是什么意思:

CREATE TABLE `tablename` (
....
....
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
...

现在将其添加到迁移中:
'timestamp' => 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP'

-1

你必须设置其他默认值,例如 null

public function up(){

        $this->createTable('POST', array(
            'id' => 'pk',
            'isremoved' => 'integer NOT NULL',
            'removaldate' => 'timestamp DEFAULT NULL',
            'post' => 'text NOT NULL',
            'creationdate' => 'timestamp DEFAULT NULL',
        ));
}

这不是空列。但问题在于,如果将默认值设置为current_timestamp(这不是问题,因为我将设置所需的值),则ON UPDATE值也会被设置。我不希望在更新行时修改该值。 - Factory Girl
我不明白你的情况,很抱歉。 - Agrest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接