web-dev-qa-db-fra.com

Comment ajouter une nouvelle colonne avec Yii 2 migrations sur une position spécifique dans une table?

Disons que j'ai cette structure de table:

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

Et je veux ajouter une nouvelle colonne appelée email, juste après id et avant first_name, en utilisant la addColumnméthode de la classe Migration.

La seule chose que je peux faire dans ma nouvelle migration est:

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

Et il le mettra à la fin du tableau, après le champ updated.

Comment puis-je ajouter une colonne à une position spécifique dans ma table, afin que cette requête SQL puisse être respectée:

ALTER TABLE contacts ADD email VARCHAR(64) AFTER id
13
omerowitz

Résolu. Si quelqu'un fait face au même problème, c'est la solution que j'ai utilisée:

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

EDIT: A partir de la version Yii 2.0.8 vous pouvez également utiliser cette syntaxe chaînée:

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

Vous pouvez utiliser la commande de migration pour cela comme ci-dessous:

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