【发布时间】:2012-06-24 18:21:33
【问题描述】:
我不是在寻找$myRowset->toArray();,因为我想获得一个对象数组。
我想做的是能够将$myRowset 与对象数组合并。
$myOtherArray = [new Foo(), new Bar()];
$array = array_merge($myRowset, $myOtherArray);
使用 Zend_Db_Table_Rowset,这是不可能的。使用$myRowset->toArray(); 也不起作用,因为我需要一个对象数组。
编辑 - 执行我想要的代码示例,但如果存在,我正在寻找更好的解决方案:
// Convert the Zend_Db_Table_Rowset to an array of Zend_Db_Table_Row
$myRowset = $dbTable->fetchAll();
$rowArray = array();
foreach ($myRowset as $row) {
$rowArray[] = $row;
}
// Merge with other array of objects
$myOtherArray = [new Foo(), new Bar()];
$finalArray = array_merge($rowArray, $myOtherArray);
【问题讨论】:
-
我不确定 Zend 应该如何知道您想从数据库返回的数据中实例化哪个对象。除了遍历数组并自己实例化每个对象之外,我认为您想要的东西是不可能的,除非您所说的对象只是指您可以通过将数组转换为对象来制作的 stdClass 对象。但你真的不想这样做,原因有很多。
-
@GordonM 不需要实例化任何东西,查询返回的行集包含
Zend_Db_Table_Row的子类型(我的模型对象)。请参阅我的编辑以更好地理解。 -
我认为您已经拥有的解决方案几乎是您唯一的选择。您可以使用一种方法扩展 Zend_Db_Table_Rowset 以返回行数组以使其更易于管理,但仅此而已。
-
为什么不用zend fetch模式呢? framework.zend.com/manual/1.12/en/… 如果您要执行
$db->setFetchMode(Zend_Db::FETCH_OBJ);,那么之后的任何fetchAll()语句都将返回一个对象数组...
标签: php arrays zend-framework zend-db zend-db-table