FuelPHP DBへのアクセス方法
FuelPHP DBへのアクセス方法
FuelPHPでDBにアクセスする方法をまとめました。
〜理由〜
- SQLを書くたびに毎回調べながらやっているので、自分なりに一度まとめたほうがいいと思いました。
- 正直DBクラスとかORMとかちゃんと理解出来ていない。。。
1.DB::query()メソッド(DBクラス)
DB - クラス - FuelPHP ドキュメント
query($sql, $type = null)
query メソッドは、新しい Database_Query_Builder オブジェクトを返します。
オブジェクトで受け取る
$result = DB::query('SELECT * FROM users')->as_object()->execute();
連想配列で受け取る
$result = DB::query('SELECT * FROM users')->execute()->as_array();
SQLをそのまま書きたいときに利用する。
備考 最近
DB::last_query();
を覚えました。
プレースホルダー 入力された値の扱い(セキュリティ)
2.クエリビルダー(DBクラス)
クエリビルダーはSQL文をメソッドで組み立てるもの。
オブジェクトで受け取る
$result = DB::select()->from('users')->as_object()->execute();
連想配列で受け取る
$result = DB::select()->from('users')->execute()->as_array();
いくつレコードが取得できたか知りたい
どのようにcountしたら早いか
$result = DB::select('*')->from('users')->execute(); // ただ結果をカウントするだけ。int が返ります。 $num_rows = count($result);
// SELECT COUNT(*) FROM `users` $result = DB::select(DB::expr('COUNT(*) as count'))->from('users')->execute();
エスケープは小難しいSQLを書く場合に使える QueryBuilderで小難しいSELECT文を書くためのノウハウ #FuelPHPAdvent2012 - Dazing days
3.Model_Crudクラス
Model_Crud - クラス - FuelPHP ドキュメント
FuelPHP Model_Crud�N���X FuelPHPのModel_Crudクラスは、基本的なCRUD (Create, Read, Update, Delete)操作のメソッドを提供している。Model_Crudクラスを継承したサブクラスは、テーブル名や主キーなどのプロパティを定義するだけで、基本的なCRUD操作を行うことができる。
- オブジェクトで受け取る
モデルクラスの作成:
class Model_Db_Crud extends Model_Crud { protected static $_table_name = 'forms'; protected static $_created_at = 'created_at'; protected static $_updated_at = 'updated_at'; }
コントローラで呼び出す:
$result = Model_Db_Crud::find_all();
4. ORMパッケージ
CRUD - Orm Package - FuelPHP ドキュメント
ORMパッケージはテーブル間の関係を処理できるORMです。 HasOne、HasMany、ManyManyという関係を処理できる他、バリデーション、論理削除、テンポラルモデル、ネスティドセット、EAVコンテナの機能もあります。 オブザーバが用意されており、特定のイベントに動作を追加することもできます。 Model_Crudより高機能ですが、その分、オーバーヘッドも大きくなります。
- オブジェクトで受け取る
モデルクラス:
class Model_Db_Orm extends \Orm\Model { protected static $_table_name = 'forms'; protected static $_properties = array( 'id', 'name', 'email', 'comment', 'ip_address', 'user_agent', '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_save'), 'mysql_timestamp' => false, ), ); }
コントローラで呼び出す
$result = Model_Db_Orm::find('all');
備考
- 論理削除が簡単にできる
論理削除モデル - Orm パッケージ - FuelPHP ドキュメント 論理削除モデルを使用するのは大変簡単で、単に Orm\Model の代わりに Orm\Model_Soft を継承するだけです。
$employee = Model_Employee::find(1);
$employee->delete(); // この従業員はまさに論理削除されました
- ORM Observer
イベントベースになっていて、特定のイベント発生時に処理を行うことが出来る。 たとえば、before_insert, before_save, after_loadなどのタイミング。 標準でいくつかのオブザーバが付属していて、自前で作ることもできる。 FuelPHPのORM Observerはとても便利 - Qiita
〜まとめ〜
- おおまかだが、DBにアクセスする方法の違いがわかった
- 今後は状況によってどのようにDBにアクセスすべきか考える