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徹底入門
posted with amazlet at 10.10.12