2016-02-13 3 views
9

のは、私は、このテーブルの構造を持っているとしましょう:テーブル内の特定の位置にYii 2マイグレーションを使用して新しい列を追加するにはどうすればよいですか?

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

そして私はaddColumnmethodMigrationクラスのを使用して、ちょうどid後とfirst_name前に、emailと呼ばれる新しい列を追加したいです。

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

そして、それはupdatedフィールドの後に、表の最後にそれを置くだろう:私は私の新しい移行を行うことができます

だけの事はあります。

どのように私は私のテーブル内の特定の位置に列を追加することができますので、このSQLクエリを尊重することができ:

ALTER TABLE contacts ADD email VARCHAR(64) AFTER id 

答えて

17

はそれを解決しました。誰もが同じ問題に直面した場合、これは私が使用したソリューションです。

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

EDIT:バージョンYii 2.0.8から、あなたにも、この連鎖の構文を使用できます。

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

ちょうど答えとしてコードをダンプすることを避けてください、そして、それが何をするのか、理由を説明しようとしてください。あなたの答えからより新しいユーザーが学ぶ方が簡単です。 – Frits

+2

また、どのバージョンから 'after'メソッドが利用可能であるか注意してください。 (2.0.8:http://www.yiiframework.com/news/97/yii-2-0-8-is-released/より) – omerowitz

2

を次のように移行コマンドを使用できます。

php yii migrate/create add_email_column_to_contacts_table --fields="email:string(64):after('id')" 
関連する問題