FuelPHP のモデルとデータベースの利用について。
データベースの接続は完了しておく(FuelPHPのDB接続の設定)。
今回の記事を書くに当たり、マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~のブログには大変お世話になりました。
公式ドキュメントだけでは理解できなかったことが、簡潔にまとめられています。
FuelPHP を勉強される人は覗いてみるのがいいと思います。
1.FuelPHPのモデル
モデルについて、公式ドキュメントより引用。
データを取得し、操作し、あるいはそれを消去したい場合、その処理は常にモデルによって行われるべきです。
~略~
データベースを変更した時もコントローラを書き換える必要はなく、データベースに影響を及ぼすモデルのみを書き換えるだけですむのです。
SQLクエリを発行するメソッドをモデルに作成し、コントローラからはモデルを呼び出すだけにしとけよ、ってこと。
また、もう一点引用。
~略~ 作られるモデルには少なくとも CRUD メソッド: create, read, update, delete (あるいはそれらのバリエーション) の 4 つが全て含まれているはずです。Fuel においては、 モデルは、デフォルトでは何も継承する必要がありません。 もちろん、自分なりのベースモデルを作ることや Fuel の Orm パッケージ を使うことも出来ます。
モデルは Model クラスを継承して利用するが、特に利用できるメソッドやプロパティは何もない。
利用したきゃ自分で独自のメソッドやプロパティを書いてねって感じかな。
2.FuelPHPでのDBの利用
モデルからデータベースへの利用方法は3つある。
DBクラス・Model_Crudクラス・ORMパッケージの3つ。
このモデルにデータベースへの処理を書き、各クラスのメソッドをコントローラから呼び出す。
DBクラスでの接続
DB クラスでは、SQLそのままに書ける。
直感的で複雑怪奇なこともできるだろう。
$result = DB::query('SELECT * FROM users WHERE id = 5');
$result->execute();
DBクラスにはクエリビルダが存在する。
DB::select()だったり、DB::insert()だったりのこと。
$result = DB::select('title','content')->from('articles')->execute()->get('title');
クエリビルダ便利だなー。
通常はこっちを使うことになりそう。
Model_Crudクラスでの接続
モデルを作るために、Model_Crud クラスを使う方法も有効。
データベース操作は CRUD (Create Retrieve Update Delete) 操作が基本であり、Model_Crud クラスはその機能を提供する。
以下のように Model_Crud をバックスラッシュ付きで継承するとDBが使える。
class Model_Select extends \Model_Crud
{
protected static $_table_name = 'users';
protected static $_primary_key = 'user_id';
}
$_table_nameプロパティは、利用するテーブル名を指定するプロパティ。
$_primary_keyプロパティは、利用するテーブルの主キーを指定するプロパティ。デフォルトは’id’。
適当なコントローラからこのモデルを呼び出す。
find_all()はModel_Crudクラスのメソッド。
public function action_select() {
// データ取得
$result = Model_Select::find_all();
}
Model_Crudクラスも便利そう。
ORMパッケージでの接続
まず、ORMでのモデルを作成する。
前にFuelPHPでマイグレーションによるテーブルの作成で作ったモデルはORMモデルになっているはず。
ないなら作る!
<?php
class Model_User extends \Orm\Model
{
// 使用するテーブル
protected static $_table_name = 'users';
//プライマリキー
protected static $_primary_key = array('user_id');
//フィールド名
protected static $_properties = array(
'id',
'name',
'email',
'sex',
'prefecture_id',
'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,
),
);
}
コントローラからは以下の呼び出しでデータ取得できる。
$result = Model_Test02::find('all');
参考にしてる「FuelPHP入門」ではORMを使ってる。
ただ、この3種類のアクセス方法で何が一番いいのかがまだ、わからない・・・
参考
FuelPHP1.6、クエリビルダを理解する(1)前準備、基本|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~
FuelPHP1.6、Model_Crudついて理解する(1)データの登録・更新|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~
FuelPHP1.6、ORMモデルでfind()時の取得カラムを理解する。|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~

コメント