web-dev-qa-db-ja.com

テーブルの特定の位置に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 |
+----+------------+-----------+---------+------+---------+---------+---------------------+---------------------+

そして、emailidの直後とfirst_nameの前に、addColumnmethodMigrationクラス。

新しい移行でできることは次のとおりです。

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

そして、それをupdatedフィールドの後のテーブルの最後に置きます。

テーブル内の特定の位置に列を追加して、このSQLクエリを尊重するにはどうすればよいですか。

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

解決しました。誰かが同じ問題に直面している場合、これは私が使用した解決策です:

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

以下のように、そのための移行コマンドを使用できます。

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