Yii2のDB Migrationを使ってテーブル作成 その3 -batch insert-

Yii2のDB Migration最終回!
最後はデータのinsertを行います。
データを1つずつinsertしてもいいんですが、
通常1つだけデータをinsertするってことはないので、
初めからBatch Insertを行います。
通常のSQLでいうバルクインサートです。
記述方法は

     $columns = array('id',
       'title',
       'content',
       'sub_table_id'
     );
     $values = array(
       array(1,
         'Title1',
         'これは1つ目',
         1,
       ),
       array(2,
         'Title2',
         'これは2つ目',
         1,
       ),
     );
     $this->batchInsert('tablename', $columns, $values);

をその2で作成したファイルに追記

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
        $this->createTable('tablename', [
            'id' => Schema::TYPE_PK,
            'title' => Schema::TYPE_STRING . ' NOT NULL',
            'content' => Schema::TYPE_TEXT,
            'sub_table_id' => Schema::TYPE_INTEGER,
        ]);
        $this->addForeignKey('fkey_tablename_sub_table_id', 'sub_table', 'sub_table_id', 'sub_table','id');
        $this->createIndex('tablename_title_index', 'tablename', 'title');
     //データinsert
     $columns = array('id',
       'title',
       'content',
       'sub_table_id'
     );
     $values = array(
       array(1,
         'Title1',
         'これは1つ目',
         1,
       ),
       array(2,
         'Title2',
         'これは2つ目',
         1,
       ),
     );
     $this->batchInsert('tablename', $columns, $values);
    }

    public function down()
    {
        $this->dropTable('tablename');
    }
}

これで初期テーブル作成コマンド用のファイルの準備が完了しました。
あとは下記を実行すると・・・

yii migrate/to m150620_123401_create_tablename_table

テーブルが作成されて、外部キー制約、インデックス、データまで準備されちゃてます!
しかも、このファイルでDB作成用のSQLは不要!
いやー便利便利。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA