パーフェクトPHPミニブログのSQLを、FuelPHPマイグレーションで実装してみました。
ミニブログのソースコードは、技術評論社のサイトからダウンロードしてください。
目的の SQL コードは下記です。(MIT License : Copyright (c) 2010 Katshuhiro Ogawa)
CREATE TABLE user(
id INTEGER AUTO_INCREMENT,
user_name VARCHAR(20) NOT NULL,
password VARCHAR(40) NOT NULL,
created_at DATETIME,
PRIMARY KEY(id),
UNIQUE KEY user_name_index(user_name)
) ENGINE = INNODB;
CREATE TABLE following(
user_id INTEGER,
following_id INTEGER,
PRIMARY KEY(user_id, following_id)
) ENGINE = INNODB;
CREATE TABLE status(
id INTEGER AUTO_INCREMENT,
user_id INTEGER NOT NULL,
body VARCHAR(255),
created_at DATETIME,
PRIMARY KEY(id),
INDEX user_id_index(user_id)
) ENGINE = INNODB;
ALTER TABLE following ADD FOREIGN KEY (user_id) REFERENCES user(id);
ALTER TABLE following ADD FOREIGN KEY (following_id) REFERENCES user(id);
ALTER TABLE status ADD FOREIGN KEY (user_id) REFERENCES user(id);
これを FuelPHP のマイグレーション機能で利用できるようにします。ここでは DBUtil クラスを利用しています。DBUtilのドキュメントとDBUtilのソースコードを元に作っています。php oil generate で作成したものではありませんのでご注意ください。
元のSQLとの違い
元のSQLはINNODBを指定していますが、下記コードではこの指定は記述していません。
元のSQLには更新日時は無いのですが、FuelPHP では作成日時と更新日時の両方を持たせることが推奨っぽいので追加しています。
namespace FuelMigrations;
class Create_users
{
public function up()
{
DBUtil::create_table('users', array(
'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
'user_name' => array('constraint' => 20, 'type' => 'varchar', 'unique' => true),
'password' => array('constraint' => 40, 'type' => 'varchar'),
'created_at' => array('constraint' => 11, 'type' => 'int'),
'updated_at' => array('constraint' => 11, 'type' => 'int'),
), array('id'));
}
public function down()
{
DBUtil::drop_table('users');
}
}
完全なコードは https://gist.github.com/2940037 にあります。app/migrations フォルダに設置し、php oil refine migrate と実行すると、データベースが作成されます。(データベースは事前に作成しておいてください。またデータベースの設定はあらかじめ config/development/db.php 等で行っておいてください。)