
ラスタ
(0 件のコメント, 47 件の投稿)
ラスタ による投稿
データベースを使う その3 ORMモデル生成
0oilコマンドでORM(Object Relation Mapper)モデルのコードを自動生成してみます。
ORMはCRUD(Create、Retrieve、Update、DeleteといったSQL処理)だけでなく、データベーステーブルをオブジェクトにマップして、テーブル間のリレーションまでも面倒を見てくれる非常に強力なシステムです。
ここでは、varchar[32]のnameカラムを持つuserテーブルを生成します(テーブルの命名には少し注意が必要です)。
$ oil g model user name:varchar[32]
上記のコマンドを実行すると、fuel/app/classes/model/user.phpファイルが生成されます。
oilコマンドは$ oil create
で作成したディレクトリで実行することに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class Model_User extends \Orm\Model { protected static $_properties = array( 'id', 'name' ); protected static $_observers = array( 'Orm\Observer_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'Orm\Observer_UpdatedAt' => array( 'events' => array('before_save'), 'mysql_timestamp' => false, ), ); } |
idはoilによって自動的に付加されます。
fuel/migrationsディレクトリにはusersテーブルをcreateする001_create_users.phpが生成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace Fuel\Migrations; class Create_users { public function up() { \DBUtil::create_table('users', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'name' => array('constraint' => 32, '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'); } } |
モデルとマイグレーションを生成したら、データベースに反映させましょう。
$ oil r migrate
を実行すると、データベースにテーブルが作成されます。
テーブルにはcreate_atとupdate_atの2つのフィールドが自動で付加されます。
oilコマンドのオプションでこれらのタイムスタンプを省略したりフィールド名を変更することができます。
FuelPHP tips データベースのcreated_at、updated_atが不要、または変更したい
0マイグレーションで生成されるデータベースにはcreated_atフィールドとupdated_atフィールドが付加されます。これらが不要な場合は、–no-timestampオプションを設定します。
$ oil g model テーブル名 [フィールド1 [フィールド2] ...] --no-timestamp
–no-timestampオプションが設定されると、モデルのコードに$_observersが生成されません。
また、created_atやupdated_atのフィールド名を変更したい場合は、オプションで--created-at=フィールド名
、--updated-at=フィールド名
を設定します。
FuelPHP tips マイグレーションしたテーブル名がなんか変
0マイグレーションで作成されたテーブル名は自動的に’s’や’es’が付加されて複数形になります。このため、生成されたテーブルが意図しないテーブル名になってしまうことがあります。
また、mysqlではテーブル名に’_’を使用できますが、FuelPHPは’_’をディレクトリ区切りと解釈するので、<code>$ oil r migrate</code>が失敗します(PDOドライバではダメでした。mysqliドライバでは大丈夫なようです)。
そのうえ、テーブル名を’user_account’などとした場合、fuel/app/classes/model/userディレクトリにaccount.phpが生成され、クラス名がModel_Accountとなってしまいます。
テーブル名の命名には、末尾が’s’で終わらないようにする、’_’を使わない、などの注意が必要です。
oil エラー”This is not a valid Fuel installation so Oil is a bit lost.”
0$ curl get.fuelphp.com/oil | sh
でFuelPHPを自動インストールして、その後oilコマンドを実行しようとすると、
This is not a valid Fuel installation so Oil is a bit lost.
とエラーを吐いて実行できないことがあります。
/usr/bin/oilをcatしてみると、./oilが存在するとき$ php oil
を実行し、./oilが無く且つcreate以外なら常に上記のエラーを表示して終了するようになっています。
つまり、/usr/bin/oilは、
$ php oil
とやらずに$ oil
で実行できるようにするラッパ- これ自体はcreateしかできない
よく考えれば判ることなんですが、自動インストールとは$ oil create
を実行することであり、/usr/bin/oilはインストーラのインストーラみたいな物なんですね。
ということで、まずはとにかく$ oil create dir
を実行して、その後oilコマンドを実行するときはcreateしたディレクトリで行いましょう。
データベースを使う その1 設定
0FuelPHPのデータベースのマイグレーションやORM(オブジェクト連携モデル)機能を使うには、データベース設定ファイルの編集が必要です。
設定ファイルは、共通の設定を実行環境ごとの設定で部分的に上書きする形式になっています。
ここでは、PDOドライバを使う設定の例を示します。
共通の設定はfuel/app/config/db.phpに記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
return array( 'default' => array( # PDOを使う 'type' => 'pdo', # 接続設定 詳細は実行環境毎のファイルに書きます 'connection' => array( # 接続を持続しない 'persistent' => false, ), # デリミタのクォート記号 'identifier' => '`', # テーブル名のプレフィクスは無し 'table_prefix' => '', # 文字コードはUTF8 'charset' => 'utf8', # キャッシュを使う 'enable_cache' => true, # プロファイルしない 'profiling' => false, ), ); |
接続の詳細を実行環境ごとのファイルに記述することで、コードを書き換えることなく開発用と公開用のデータベースサーバを切り替えて使用することができます。 開発用の設定ファイルはfuel/app/config/development/db.php、公開用の設定ファイルはfuel/app/config/production/db.phpです。
1 2 3 4 5 6 7 8 9 10 11 |
return array( 'default' => array( 'connection' => array( # localhost上のmysqlに作成したfuel_dbデータベースを使う場合 # より安全にするため、dsnにもcharsetを設定する 'dsn' => 'mysql:host=localhost;port=3306;dbname=fuel_db;charset=utf8', 'username' => 'ユーザ名', 'password' => 'パスワード', ), ), ); |
開発用と公開用のほか、テスト用、ステージング用の環境を使うことができます。
設定ファイルはそれぞれfuel/app/config/test/db.php、fuel/app/config/staging/db.phpです。
データベースのモデルではORMパッケージを使うので、fuel/app/config/config.phpのalways_loadにORMの読み込みを追加します。
1 2 3 4 5 6 |
'always_load' => array( 'packages' => array( 'orm', 'parser' ) ), |
追補 mysqliドライバを使う例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
return array( 'default' => array( # mysqliを使います 'type' => 'mysqli', # 接続設定 詳細は実行環境毎のファイルに書きます 'connection' => array( # 接続を持続しない 'persistent' => false, ), # デリミタのクォート記号 'identifier' => '`', # テーブル名のプレフィクスは無し 'table_prefix' => '', # 文字コードはUTF8 'charset' => 'utf8', # キャッシュを使う 'enable_cache' => true, # プロファイルしない 'profiling' => false, ), ); |
1 2 3 4 5 6 7 8 9 10 11 12 |
return array( 'default' => array( # localhost上のmysqlに作成したデータベースfuel_dbを使う場合 'connection' => array( 'hostname' => 'localhost', 'port' => '3306', 'database' => 'fuel_db', 'username' => 'ユーザ名', 'password' => 'パスワード', ), ), ); |
UbuntuでのVMware Workstation再設定
0カーネルアップデートなどの後、VMware関連モジュールのリビルドを行うコマンド。
1 |
$ sudo vmware-modconfig --console --install-all |
Ubuntu12.04.1 VMware8.0.4
インストール
0最近人気という噂のPHPフレームワーク、FuelPHPを使ってみます。
日本語のドキュメントはこちらで閲覧できます。gitでざっくり落とすならこちら。
インストールは、自動または手動を選択できますが、ここでは自動インストールを行います。
まず最初にFuelPHPの様々な自動生成機能を提供してくれるoilコマンドをインストールします。
1 |
$ curl get.fuelphp.com/oil | sh |
oilコマンドをインストールしたら、HTMLのドキュメントルートに移動し、oilコマンドでプロジェクトリソースを生成します。
1 2 3 4 5 6 |
#ubuntuの場合のデフォルト $ cd /var/www #mysightディレクトリに置くことにします $ mkdir mysight #mysightディレクトリにリソースをインストールします $ oil create mysight |
これでインストールは完了です。
ブラウザでmysight/publicを開くとウェルカムページが表示されます。
mysight下のfuelphpをEclipse PDTにプロジェクトとして取り込めば開発を始めることができます。
2013年1月8日現在、FuelPHPのEclipseプラグインはまだ無いようです。
FuelPHPを使ってみた過程を書いていきます。
連載にあたっては、達人出版会の「はじめてのフレームワークとしてのFuelPHP」を参考にしました。