ORマッッピングのメモ
Zend Framework のORマッッピング(Zend_Db_Table)使用のメモです。
テーブルクラスの定義
Zend_Db_Table_Abstractを継承したクラスとして作成します。単純なケースでは、$_nameメンバにテーブル名を指定するだけです。(その他、参照テーブルの設定などもできます。)
<?php require_once 'Zend/Db/Table.php'; class Category extends Zend_Db_Table_Abstract { protected $_name = 'categories'; } ?>
検索
定義したテーブルクラスインスタンスのfetchAll()で複数行の検索、fetchRow()で1件の検索を行うことができます。その引数としては、Zend_Db_Table_Selectのインスタンスを指定します。これは、テーブルクラスインスタンスのselect()で生成されます。
<?php require_once 'Category.php'; require_once 'Zend/Db/Table.php'; # 複数行取得例 $table = new Category(); $rows = $table->fetchAll( $table->select() ->from($table, array('id','name','description'))); foreach($rows as $row) { print("id = " . $row->id); print("name = " . $row->name); } # 1行取得例 $table = new Category(); $row = $table->fetchRow( $table->select() ->where("id = ?", 1 )); print("id = " . $row->id); print("name = " . $row->name);
-
- Zend_Db_Table_Selectのwhere()で絞り込み条件を指定します。複数指定することができ、And演算子での連結になります。
whereOrorWhere(<式>,<値>)でOr演算子での連結ができます。 - Zend_Db_Table_Selectのfrom(<テーブルインスタンス>,<列名の配列>)で選択列を指定できます。
- Zend_Db_Table_Selectには、その他にもorder(),join(),joinInner()などが使えます。
- where()やfrom()は、自分を返すので、メソッドチェインできます。
- fetchRowの結果は、Zend_Db_Table_Rowのインスタンスであり「$row->列名」のかたちで列の値を取得できます。fetchAllは、Zend_Db_Table_Rowを配列にしたものです。
- Zend_Db_Table_Selectのwhere()で絞り込み条件を指定します。複数指定することができ、And演算子での連結になります。
登録
Zend_Db_Table_Rowインスタンスのsave()でテーブルへの保存ができます。新規の場合は定義したテーブルクラスインスタンスのcreateRow()で生成したRowインスタンス、変更の場合は、fetchRow(),fetchAll()で取得したRowインスタンスに対してsave()を実行します。
require_once 'Category.php'; require_once 'Zend/Db/Table.php'; #新規登録 $table = new Category(); $row = $table->createRow(); $row->name = "hoge"; $row->description = "説明.."; $row->save(); #変更登録 $table = new Category(); $row = $table->fetchRow( $table->select()->where("id = ?", 1 )); $row->name = "hoge"; $row->description = "説明.."; $row->save();