CodeIgniter3 migrationの話をば。

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 12日目です!
https://qiita.com/advent-calendar/2017/code_igniter

この記事は、CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)の記事の補足です。

Migrationについて

本家ユーザーガイド :
https://www.codeigniter.com/user_guide/libraries/migration.html

CodeIgniterでもMigrationを使ってテーブル定義の管理をすることができます。
CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)では、チュートリアルで触れられていないため記載しませんでしたが、使うと便利です。
この機能は2の頃にはすでにあったのですがあまり知られていません。
CodeIgniterがシンプルで、たくさんの機能を実装していないという印象からではないかと思います。

設定

application/config/migration.php の編集
migrationを使用可能にして、
migrationのファイルを保存するフォルダを指定して
migrationのファイルをつくるのにtimestamp使いますを指定します。YYYYMMDDHHIISS フォーマットなので、(e.g. 20171213100537) です。
マイグレーションのバージョンは自動で最新にしといてね設定もfalseになっているのをtrueに変更です。

フォルダを作りましょ

migrationファイルの作成

ファイルができていることを確認

これから作るmigrationのバージョンは、 20171213114048 になりました。

ユーザーガイドに従って書くとこんな感じです。
もうすでに皆様もPHP7環境だと思うのでarray()は[]にしちゃっていいと思います。

Migrate Controller Classの作成

application/controllers/Migrate.php

ドキュメントのサンプルコードはこんな感じで不親切です….。
application/config/migration.php の $config[‘migration_version’] = 0; のところを、実行する最終のバージョン番号を設定せねば動きません….
最新の状態にするのであれば、$this->migration->latest()を使うと良いです。
application/controllers/Migrate.php

migrationの実行と結果/h2>
migrationを実行します。

実行された結果を見てみます

newsテーブルと、migrationsテーブルができています。

Migrate Controllerにロールバックを追加してみる

Migrate Controllerにロールバックを追加しました。
またhttp(s)越しに、外部から叩かれないように、

コマンドの実行

20171213114048_add_news.phpの状態に戻ります。
まだ1つのバージョンしかないのでこれしか指定できなかったわけですが、これもやり直したい場合ありますよね?

エラーを吐いてしまいますが、これでnewsテーブルがdropされます。
これはもうちょっとうまい方法が欲しい…..エラーが発生しない方法に寄せたい….ですが今日のところはこれで0地点に戻りますということにします。

やっぱりSQLで書きたいやん?

20171213114048_add_news.php の upメソッドはこんな感じになります。

migrationはsqlそのままで行きたいかどうかは好みが別れるかと思います。
MySQLを使っての設計と実装の場合、mysqlWorkBenchを使う場合も多いでしょうし、そうするとツールからcreate table文は自動抽出でしょうし、sqlの方が便利だと思うんだよねー。

さてと、チュートリアルに戻りましょうか!!!