2016-02-13 30 views
9

Powiedzmy mam tej struktury tabeli:Jak dodać nową kolumnę z migracjami Yii 2 na określonej pozycji w tabeli?

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

I chcę dodać nową kolumnę o nazwie email, tuż po id i przed first_name, używając addColumnmethod klasy Migration.

Jedyne, co mogę zrobić w moim nowym migracji jest:

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

I będzie umieścić go na końcu stołu, po updated dziedzinie.

Jak mogę dodać kolumnę o określonej pozycji w moim stole, więc ta kwerenda SQL mogą być przestrzegane:

ALTER TABLE contacts ADD email VARCHAR(64) AFTER id 

Odpowiedz

17

rozwiązać go. Jeśli ktoś stoi ten sam problem, jest to rozwiązanie użyłem:

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

EDIT: Od wersji Yii 2.0.8 można użyć tego przykuty składni, a także:

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

Staraj się unikać po prostu wyrzucania kodu jako odpowiedzi i próbuj wyjaśnić, co robi i dlaczego - w ten sposób łatwiej będzie nowemu użytkownikowi uczyć się na podstawie Twojej odpowiedzi. – Frits

+2

Należy również zwrócić uwagę, z której wersji dostępna jest metoda "po". (Od wersji 2.0.8: http://www.yiiframework.com/news/97/yii-2-0-8-is-released/) – omerowitz

2

W tym celu można użyć polecenia migracji:

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