いろいろ~備忘録~

WEBエンジニアによる記録

勉強になったことを記録

【FuelPHP】oilコマンドを利用したOrmモデルの自動生成

説明

oilコマンドを利用して、Ormモデルマイグレーションを作成します。
また、テーブルの作成もoilコマンドで自動でします。

引用
oilコマンドでテーブルの作成するメリットは、データベースの構造もバージョン管理できるようになること

1.oilコマンドのインストール

oilコマンドを利用するためには、下記のコマンドでインストールをします。

$ curl get.fuelphp.com/oil | sh

詳しくはドキュメント
インストール方法 - インストール - FuelPHP ドキュメント

2.モデルの生成

コマンドラインFuelPHPをインストールしたディレクトリに移動して、次のコマンドを入力します。

$ php oil g model user id:int name:varchar[50]


下記のようにコマンドの応答を見ると、
1行目は、APPPATH/classes/model/直下にsudentというモデルが作成されています。
2行目は、APPPATH/migrations/というディレクトリ以下にマイグレーションが作成されています。

 Creating model: /home/apache/sample/fuel/app/classes/model/user.php
 Creating migration: /home/apache/sample/fuel/app/migrations/001_create_user

マイグレーションはテーブル作成時に、使用します。
Generate - Oil パッケージ - FuelPHP ドキュメント

3.テーブル作成

先ほど作成したマイグレーションを使用して、テーブルを作成します。
次のコマンドを入力します。

$ php oil refine migrate

db.phpで設定されているデータベース上にuserテーブルmigrationという2つのテーブルが作成されています。

マイグレーションファイルとモデルの中身を確認します。

<?php
// マイグレーション
namespace Fuel\Migrations;

class Create_users
{
	public function up()
	{
		\DBUtil::create_table('users', array(
			'id' => array('constraint' => 11, 'type' => 'int'),
			'name' => array('constraint' => 50, 'type' => 'varchar'),
			'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true),
			'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true),

		), array('id'));
	}

	public function down()
	{
		\DBUtil::drop_table('users');
	}
}

<?php
// モデル
class Model_User extends \Orm\Model
{
	protected static $_properties = array(
		
		'id',
		'name',
		'created_at',
		'updated_at',
	);

	protected static $_observers = array(
		'Orm\Observer_CreatedAt' => array(
			'events' => array('before_insert'),
			'mysql_timestamp' => false,
		),
		'Orm\Observer_UpdatedAt' => array(
			'events' => array('before_update'),
			'mysql_timestamp' => false,
		),
	);

	protected static $_table_name = --crud<'users';

}

備考

Model_Crudモデルの自動生成
oil g modelコマンドのオプションとして、末尾に--crudを追加することにより、
\Orm\Modelではなく、Model_Crudを拡張したモデルを自動生成することができます。
Model_Crudクラスでも、\Orm\Modelと同様にcreated_atupdated_atが使用できます。
 
 
お疲れ様でした。