日記
こっちの方がましか?Edit

Zend Frameworkをどう使うか その14」の最後の方で、Zend_Dbを使うよりもPEAR DB_DataObjectを使った方がきれいに書けたなーといっていたサンプルの、Zend_Dbを使ったもうちょっとましな書き方を思いついた。

class Stock extends Zend_Db_Table_Row {}
class Product extends Zend_Db_Table_Row {}
$select = $db->select();
$select->from('stock', 'stock.id as stockid');
$select->join('product', 'stock.product = product.id', 'product.id as productid');
$select->where('product.kind = ?', 'book');
$sql = $select->__toString();
$rows = $db->fetchAll($sql);
$stockTable = new Stock();
$productTable = new Product();
foreach ($rows as $row) {
$stock = $stockTable->find($row['stockid']);
$product = $productTable->find($row['productid']);
if ($stock->amount == 0) {
// 在庫がない本の場合の処理
}
}

毎ループで必ず2回ずつ1行レコードを取ってくるクエリーが投げられてうざいけど、primary keyに対する検索だから検索自体は高速だし、末端でのレコードレベルに対するPHPコードからの操作は、それぞれZend_Db_Table_Rowに対する操作になっているんで、連想配列に対する操作と比べると安全だ。O/Rマッパーを使うんなら、内部的なDBとのやりとりが多少冗長でも、PHPコード上の冗長さが少ない方がましだろう。

Zend_Db_TableによるO/Rマッパーを使った操作は、基本的にこういった感じのアプローチで書くようになるのかな?

Published At2006-03-25 00:00Updated At2006-03-25 00:00