Code Happy のブログチュートリアルに取り掛かるにあたって、新たに users テーブルをマイグレーションで作成する解説となっているのだが、以前マイグレーションの説明で users テーブルを作成していたので、これを利用しようかと考えた。
チュートリアルで作成するブログ「WordPre…」ではなく「Wordpush」では、以前の users テーブルに新しく「nickname」カラムを追加する必要がある。で、次のSQLとなるよなプログラムはどう書けばいいのか調べた。
ALTER TABLE users ADD COLUMN nickname varchar(128) NOT NULL AFTER username;
が、どうやら綺麗に書く方法はないようだ。そこでフォーラムの「Add column in table and migrate afterwards?」を参考に以下のようにしてみた。
先ず新しく「$ php artisan migrate:make add_users」でマイグレーションのテンプレートを生成して、次のようにプログラムした。
<?php class Add_Users { public function up() { DB::query('ALTER TABLE users ADD nickname VARCHAR(128) NOT NULL AFTER username'); } public function down() { Schema::table('users', function($table) { $table->drop_column('nickname'); }); } }
見ての通りあまり美しくないけど仕方ないか。
実行は「$ php artisan migrate」、戻すときは「$ php artisan migrate:rollback」。
なお、新しい Laravel 4 ではできそうな感じです。取り付いたら試してみようかと。多分次のように書くのではないかな?と。
Schema::add('users', function($table) { $table->string('nickname', 128)->after('username'); });
まだよくわかりませんが。