如何在表中的特定位置添加具有Yii 2迁移的新列?

时间:2016-02-13 12:17:06

标签: php mysql yii2 database-migration

我们说我有这个表结构:

+----+------------+-----------+---------+------+---------+---------+---------------------+---------------------+
| id | first_name | last_name | country | city | address | zipcode | created             | updated             |
+----+------------+-----------+---------+------+---------+---------+---------------------+---------------------+
|  1 | Duvdevan   | Duvdevani | NULL    | NULL | NULL    | NULL    | 2016-02-12 15:37:19 | 2016-02-12 16:35:57 |
+----+------------+-----------+---------+------+---------+---------+---------------------+---------------------+

我想使用email的{​​{1}} methodid之后和first_name之前添加一个名为addColumn的新列}。class。

我在新迁移中只能做的事情是:

Migration

它会在public function up() { $this->addColumn('contacts', 'email', $this->string(64)); } 字段之后将其放在表的末尾。

如何在表格中的特定位置添加列,以便可以遵守此SQL查询:

updated

4 个答案:

答案 0 :(得分:22)

解决了它。如果有人面临同样的问题,这就是我使用的解决方案:

public function up()
{
    $this->addColumn('contacts', 'email', 'VARCHAR(64) AFTER id');
}

编辑:从版本Yii 2.0.8开始,您也可以使用此链式语法:

$this->addColumn('contacts', 'email', $this->string(64)->after('id'));

答案 1 :(得分:9)

public function up()
{
    $this->addColumn('contacts', 'email', $this->string(64)->after('id'));
}

答案 2 :(得分:5)

您可以使用以下命令执行迁移命令:

php yii migrate/create add_email_column_to_contacts_table --fields="email:string(64):after('id')"

答案 3 :(得分:-1)

如果迁移名称的格式为add_xxx_column_to_yyy_table,则文件内容将包含必要的addColumndropColumn语句。

因此,您应该运行以下命令以将列email添加到表contacts中:

yii migrate/create add_email_column_to_contacts_table --fields="email:string(64)"

文档:https://www.yiiframework.com/doc/guide/2.0/en/db-migrations#add-column