Reputation: 4097
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
Upvotes: 18
Views: 26914
Reputation: 87
If the migration name is of the form add_xxx_column_to_yyy_table
then the file content would contain addColumn
and dropColumn
statements necessary.
So you should run the following command to add column email
to table contacts
:
php yii migrate/create add_email_column_to_contacts_table --fields="email:string(64)"
Documentation: https://www.yiiframework.com/doc/guide/2.0/en/db-migrations#add-column
Upvotes: 0
Reputation: 1770
You can use migration command for that as below :
php yii migrate/create add_email_column_to_contacts_table --fields="email:string(64):after('id')"
Upvotes: 9
Reputation: 4097
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'));
Upvotes: 28
Reputation: 161
public function up()
{
$this->addColumn('contacts', 'email', $this->string(64)->after('id'));
}
Upvotes: 15