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);
    1. Zend_Db_Table_Selectのwhere()で絞り込み条件を指定します。複数指定することができ、And演算子での連結になります。whereOrorWhere(<式>,<値>)でOr演算子での連結ができます。
    2. Zend_Db_Table_Selectのfrom(<テーブルインスタンス>,<列名の配列>)で選択列を指定できます。
    3. Zend_Db_Table_Selectには、その他にもorder(),join(),joinInner()などが使えます。
    4. where()やfrom()は、自分を返すので、メソッドチェインできます。
    5. fetchRowの結果は、Zend_Db_Table_Rowのインスタンスであり「$row->列名」のかたちで列の値を取得できます。fetchAllは、Zend_Db_Table_Rowを配列にしたものです。

登録

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();