ECサイト運営開発記

PHPフレームワーク Laravelの使い方を中心とした通販サイトの開発日記

findManyToManyRowsetメソッドでトラブった

Zend_Db_Table_RowクラスのfindManyToManyRowsetメソッドの仕様が変わってしまったため、中間テーブルのデータが取得できないという事態に陥った。
原因はZend_Db_Table_Row_AbstractのfindManyToManyRowsetメソッド内にある一行。
以前は、Zend_Db_Select::SQL_WILDCARD = * が指定されていて、中間テーブルのデータも全て取得してくれたが、今の、空の配列 array()が記述されているため、中間テーブルの情報も空になってしまう。

[仕様変更後]
$select->from(array('i' => $interName), Zend_Db_Select::SQL_WILDCARD, $interSchema)

[仕様変更後]
$select->from(array('i' => $interName), array(), $interSchema)

おかげで、いろいろと面倒なことになった。しかし、どうすれば、中間テーブルの情報を取得できるか?書き換えれば早いんだろうけど、出来るだけ、本体には手を加えたくない。だから、あんまりスマートな方法とは言えないけど、findManyToManyRowsetの第5引数にZend_Db_Selectを指定できるので、カラムを追加するSelectオブジェクトを作成することに。

<?php

// $orderItemTableが中間テーブル。
// FROM句を一度リセットしないと、こける。

// 中間テーブルのデータを取得するZend_Db_Selectオブジェクト
$select=$orderItemTable->select()->from(array("i"=>$orderItemTable));
$select->columns("i.*");
$select->reset(Zend_Db_Select::FROM);

// データ取得 
$rowset=$orderRow->findManyToManyRowset("ItemTable","OrderItemTable",null,null,$select);

?>

しかし、なんか、違わないか?

Zend Framework徹底入門
Zend Framework徹底入門
posted with amazlet at 10.10.12
山田 祥寛
翔泳社
売り上げランキング: 36990
おすすめ度の平均: 4.0
4 次のステップ
5 2冊目の入門〜中級として最適!
3 MVCはどこ行った?
5 本当にZend Frameworkの全てが解りますよ。