2016-02-13 7 views
9

Lassen Sie uns sagen, dass ich diese Tabelle Struktur:Wie füge ich eine neue Spalte mit Yii 2 Migrationen an einer bestimmten Position in einer Tabelle hinzu?

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

Und ich möchte eine neue Spalte email, kurz nach id und vor first_name, mit dem addColumnmethod der Migration Klasse aufgerufen hinzuzufügen.

Das Einzige, was ich in meiner neuen Migration tun kann, ist:

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

Und es wird es auch am Ende der Tabelle setzen, nach updated Feld.

Wie kann ich eine Spalte an einer bestimmten Position innerhalb meiner Tabelle hinzufügen, so dass diese SQL-Abfrage beachtet werden:

ALTER TABLE contacts ADD email VARCHAR(64) AFTER id 

Antwort

17

es gelöst. Wenn jemand das gleiche Problem steht, das ist die Lösung, die ich verwendet:

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

EDIT: Ab Version Yii 2.0.8 können Sie diese gekettet Syntax auch:

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

Bitte versuchen Sie zu vermeiden, dass Sie einfach einen Code als Antwort ausgeben und versuchen Sie zu erklären, was er tut und warum - auf diese Weise wird es für einen neueren Benutzer leichter sein, aus Ihrer Antwort zu lernen. – Frits

+2

Beachten Sie auch, aus welcher Version die 'after' Methode verfügbar ist. (Von 2.0.8: http://www.yiiframework.com/news/97/yii-2-0-8-is-released/) – omerowitz

2

Sie können den folgenden Migrationsbefehl verwenden:

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