「しかし、このようなカスタムクエリを作成すると、配列で結果が得られます」
Zend_Db_Adapter_Abstract::fetchAll()
コードのdocblockに従って配列を返す呼び出しを行っているため、配列を取得しています:-
/**
* Fetches all SQL result rows as a sequential array.
* Uses the current fetchMode for the adapter.
*
* @param string|Zend_Db_Select $sql An SQL SELECT statement.
* @param mixed $bind Data to bind into SELECT placeholders.
* @param mixed $fetchMode Override current fetch mode.
* @return array
*/
public function fetchAll($sql, $bind = array(), $fetchMode = null)
「DbTable で fetchAll() を呼び出すと、DbTable で定義された適切な DbRow クラスで結果が得られます。」
これを行うZend_Db_Table_Abstract::fetchAll()
と、コード内の docblock に従ってZend_Db_Table_Rowset
:-を返す呼び出しが行われます。
/**
* Fetches all rows.
*
* Honors the Zend_Db_Adapter fetch mode.
*
* @param string|array|Zend_Db_Table_Select $where OPTIONAL An SQL WHERE clause or Zend_Db_Table_Select object.
* @param string|array $order OPTIONAL An SQL ORDER clause.
* @param int $count OPTIONAL An SQL LIMIT count.
* @param int $offset OPTIONAL An SQL LIMIT offset.
* @return Zend_Db_Table_Rowset_Abstract The row results per the Zend_Db_Adapter fetch mode.
*/
public function fetchAll($where = null, $order = null, $count = null, $offset = null)
「このデータを DbRows で強制的に受け取ることができるパラメーターはありますか、それとも自分で行を作成してそれらの配列を入力する必要がありますか?」
いいえ、ありませんが、正しいオブジェクトで正しいメソッドを呼び出すと、行セットが返されます。
これを行うには、次の行を変更します:-
$query = $this->_dbTable->getDefaultAdapter()->select()
に:-
$query = $this->_dbTable->select()
この行: -
return $this->_dbTable->getDefaultAdapter()->fetchAll($query);
に:-
return $this->_dbTable->fetchAll($query);
これで必要なものが得られるはずです。ZF に行き詰まっている場合は、常にコードを確認する価値があります。ZF は、利用可能な最高のドキュメントです。