1

当我在我的 DbTable 上调用 fetchAll() 时,我会在 DbTable 中定义的正确 DbRow 类中得到结果。

但是当我像这样创建自定义查询时,我会在数组中得到结果。是否有任何参数可以强制在 DbRows 中接收此数据,或者我应该自己创建行并用这些数组填充它们?

$query = $this->_dbTable->getDefaultAdapter()->select()
        ->from('doctor.doctor')
        ->joinInner('facility.doctorfacility', 'facility.doctorfacility.doctor_id = doctor.doctor.id')
        ->joinInner('facility.facility', 'facility.doctorfacility.facility_id = facility.facility.id')
        ->where(implode(' AND ', $conds));

return $this->_dbTable->getDefaultAdapter()->fetchAll($query);
4

2 回答 2

3

“但是当我像这样创建自定义查询时,我会在数组中得到结果”

你得到一个数组,因为你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 调用 which 返回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 中,查看代码总是值得的,它是迄今为止最好的文档。

于 2012-06-08T18:26:53.977 回答
1

您不能强制它,因为数据将来自多个表,因此 zend_db 无法进行映射。它留给我们将数据映射到实体。

如果您想要对象数组,则可以更改获取模式。

Zend_Db::FETCH_OBJ:返回对象数组中的数据。默认类是 PHP 内置类 stdClass。结果集的列可用作对象的公共属性。

仅供参考:获取模式

一些框架,如 Doctrine,将允许我们提供映射器,我们可以在其中传递自定义映射器对象。

于 2012-06-08T15:15:55.107 回答