CodeIgniter: migrationをしてみる

現在、仕事ではなく個人的な用途でCodeIgniterを使っています。既存のコンテンツのCMS脱却を図ろうとしているためです(CMSでないほうが楽な場合のほうが多い。ブログは除く)。
CodeIgniterはシンプルなMVCモデルのフレームワークなのですが、Modelを使わない場合はわかりやすいテンプレート型のCMSとして活用できるな!と思ったので、これを採用しました。

しかし、データベースを使ったアプリ部分も新たに追加しようかなと思ったので、Modelも使ってみようかなと思い、調べていました。仕事でRailsをやるようになったので、CodeIgniterにもMigrationのような機能はないかなー?と思って調べてみたところ、ありました。でもまだ日本語のマニュアルはなさげです。

英語マニュアルにリンクをはっときます。
CodeIgniter User Guide Version 2.1.2 : Migration Class

  1. まず、application/config/migration.phpの$config[‘migration_enabled’]をTRUEに設定します。
  2. そして、applicationフォルダの下にmigrationsフォルダを作成します。
  3. そして、001_create_users.phpを作成し、以下のように定義します。
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Migration_Create_users CI_Migration {
    
      public function up()
      {
        $this->dbforge->add_field('id');
        $this->dbforge->add_field(array(
          'name' => array(
            'type' => 'VARCHAR',
            'constraint' => '100',
          ),
          'password' => array(
            'type' => 'VARCHAR',
            'constraint' => '100'
          )
        ));
    
        $this->dbforge->create_table('users');
      }
    
      public function down()
      {
        $this->dbforge->drop_table('users');
      }
    }
    
  4. 次に、application/config/migration.phpの$config[‘migration_version’]を1にします。
  5. migrateするには、Migrateライブラリを使う必要があるため、それを呼びます。呼ぶには、コントローラーからアクセスして呼ぶっぽいです。コマンドラインでもできるかもしれないけど、そのやり方は書いてなかったですね。例えば、Migrateコントローラーを作って呼んでみます。
    <?php
    class Migrate extends CI_Controller{
    
      public function index() {
        $this->load->library('migration');
        if (!$this->migration->current()) {
          show_error($this->migration->error_string());
        }
      }
    }
    
  6. http://localhost/index.php?migrate/indexにアクセスしてみましょう(URLルーティングいじってたら別になりますので注意。まぁ普通はいじってると思いますが)
  7. エラーになったら、原因を直してリロードしましょう。何も表示されなかったらマイグレーション成功です。phpMyAdminなどで見てみましょう。

一カ所、ハマった点がありまして、それはprimary keyを設定するところでした。
$this->dbforge->add_field(‘id’);
とすると、自動的にそれがプライマリキーになります。
CodeIgniterのサイトのサンプルコードが’blog_id’となっていたので、それを’id’に修正してからmigrateしたら、エラーで怒られてしまいました。先にadd_fieldしておくとよいでしょう。
SQLを書かなくてもデータベースのテーブルを作ることができて、バージョンも管理できるという点が、やっぱり好きですねぇ。


タグ CodeIgniter, PHP | パーマリンク.

コメントを残す

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