当我在我的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);
答案 0 :(得分: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返回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,总是值得查看代码,这是迄今为止最好的文档。
答案 1 :(得分:1)
您不能强制它,因为数据来自多个表,因此zend_db无法进行映射。它留给我们将数据映射到实体。
如果您需要对象数组,则可以更改提取模式。
Zend_Db :: FETCH_OBJ:返回对象数组中的数据。默认 class是PHP内置类stdClass。结果集的列 可用作对象的公共属性。
仅供参考:Fetch Mode
某些框架就像Doctrine一样,允许我们提供mapper,我们可以在这里传递自定义mapper对象。