How to add a new column with Yii 2 migrations on a specific position in a table?

Zlatan Omerović picture Zlatan Omerović · Feb 13, 2016 · Viewed 17.7k times · Source

Let's say I have this table structure:

+----+------------+-----------+---------+------+---------+---------+---------------------+---------------------+
| 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 |
+----+------------+-----------+---------+------+---------+---------+---------------------+---------------------+

And I want to add a new column called email, just after id and before first_name, using the addColumn method of the Migration class.

Only thing I can do in my new migration is:

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

And it will put it at the end of the table, after updated field.

How can I add a column at a specific position within my table, so this SQL query could be respected:

ALTER TABLE contacts ADD email VARCHAR(64) AFTER id

Answer

Zlatan Omerović picture Zlatan Omerović · Feb 13, 2016

Solved it. If anyone faces the same issue, this is the solution I used:

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

EDIT: From version Yii 2.0.8 you can use this chained syntax as well:

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