gpt4 book ai didi

zend-framework - 将 Zend\Db\ResultSet\HydratingResultSet 转换为对象数组

转载 作者:行者123 更新时间:2023-12-04 18:44:50 24 4
gpt4 key购买 nike

在我的 Mapper 类中,我正在扩展 AbstractDbMapper来自 ZfcBase从数据库中获取行。一个简单的例子是这样的代码:

class MyMapper extends AbstractDbMapper
{

//...

public function fetchAll() {
$select = $this->getSelect();
return $this->select($select); // returns HydratingResultSet
}
}

问题是 $this->select()返回 Zend\Db\ResultSet\HydratingResultSet (包含需要的和水合的物体)。但我想返回这些对象的数组而不是 HydratingResultSet包含对象。

首先要看的是 HydratingResultSet::toArray()但这会返回一个多维数组而不是对象数组。

所以我选择手工来做:
public function fetchAll() {
$select = $this->getSelect();

$results = array();
foreach ($this->select($select) as $object) {
$results[] = $object;
}
return $results; // returns array of needed objects
}

这有效,但在每个 fetch 方法中看起来都很丑陋。我是否必须修改 select() 中的代码才能获得想要的行为,还是有更简单的方法?

顺便说一句:甚至建议返回一个数组或像这样转换它吗?谢谢你的帮助!

最佳答案

更新:

有更清洁的可能性来做到这一点(来自 https://stackoverflow.com/a/19266650/1275778 的豪华轿车)。适应我上面的例子,它的工作原理是这样的:

public function fetchAll() {
$select = $this->getSelect();
$results = $this->select($select);
return \Zend\Stdlib\ArrayUtils::iteratorToArray($results); // returns desired array of objects
}

如果豪华轿车在这里发布他的回答,我会很乐意接受。

旧答案:

由于没有人能回答我的问题,我尝试实现最干净的选项(对我而言):扩展 AbstractDbMapper添加上述功能。我在这里为任何寻求解决方案的人记录下来:
MyAbstractDbMapper extends AbstractDbMapper
{
/**
* @param Select $select
* @param object|null $entityPrototype
* @param HydratorInterface|null $hydrator
* @return array
*/
protected function select(Select $select, $entityPrototype = null,
HydratorInterface $hydrator = null)
{
$resultSet = parent::select($select, $entityPrototype, $hydrator);
$results = array(); // Array of result objects
foreach ($resultSet as $object) {
$results[] = $object;
}
return $results;
}
}
select()MyAbstractDbMapper现在返回一个对象数组而不是 HydratingResultSet .

由于这被否决了,有人可以解释为什么吗?

关于zend-framework - 将 Zend\Db\ResultSet\HydratingResultSet 转换为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com