【问题标题】:how to return an array of objects in zend framework 2?如何在 zend 框架 2 中返回一个对象数组?
【发布时间】:2013-09-22 05:42:32
【问题描述】:

我在 zf2 中进行查询,我得到一个 object(Zend\Db\ResultSet\HydratingResultSet),我必须打开一个 foreach,才能访问属性。

我想默认获取一个对象数组。

这是我的一些代码:

工厂

'address-mapper'  => function ($serviceManager) {
    $mapper = new Mapper\Address();
    $mapper->setDbAdapter($serviceManager->get('Zend\Db\Adapter\Adapter'));
    $mapper->setEntityPrototype(new Entity\Address);
    $mapper->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods);

    return $mapper;
}

查询

public function fetchById()
{
    $select = $this->getSelect()->where(array('id' => $Id));
    return $this->select($select);
}

这给了我回报:

object(Zend\Db\ResultSet\HydratingResultSet)[459]
      protected 'hydrator' => 
        object(Zend\Stdlib\Hydrator\ClassMethods)[415]
          protected 'underscoreSeparatedKeys' => boolean true
          private 'callableMethodFilter' => 
          ....
          ....

有什么想法我需要做什么?

【问题讨论】:

标签: php arrays object zend-framework2 zend-db


【解决方案1】:

正如史蒂夫所指出的,您可以像数组一样迭代结果集。但是如果你需要它作为一个实际的数组,ZF2 提供了 iteratorToArray 函数,它会为你将它转换为一个数组。

public function fetchById($Id) {
    $select = $this->getSelect()->where(array('id' => $Id));
    $results = $this->select($select);

    return \Zend\Stdlib\ArrayUtils::iteratorToArray($results);
}

【讨论】:

  • 这就是我在这里寻找的内容:stackoverflow.com/questions/16590174/… 如果您在此处发布您的答案,我会接受!非常感谢!
  • 似乎第二个参数 $recursive 应该是假的。
【解决方案2】:

Zend\Db\ResultSet\HydratingResultSet 有一个toArray 方法。因此,您可以这样做来获取结果的多维数组而不是结果集:

public function fetchById()
{
    $select = $this->getSelect()->where(array('id' => $Id));
    $arrayResults = $this->select($select)->toArray()
    return $arrayResults;
}

【讨论】:

  • 为了一致性起见,我正在寻找一个对象数组,而不是数组数组
  • HydratingResultSet 实现了Iterator 接口,因此您已经可以使用foreach 来循环遍历结果,就好像它是一个数组一样。如果您确实需要一个对象数组,则必须使用 foreach 手动构造数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多