Laravel

Laravel3 テーブルのカラム追加

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');
});

まだよくわかりませんが。