Zend框架2 \ Zend \ Db \ ResultSet \ ResultSet-> toArray()不返回记录

时间:2012-10-06 07:39:06

标签: php zend-framework2

我只是尝试通过扩展Zend AbstractTableGateway并使用继承的select()函数来获取给定表中的所有记录。这个select()函数返回类型Zend ResultSet但是我无法使用toArray()获得一系列结果。

我收到以下消息:

  

作为此DataSource的一部分的行,类型对象无法转换为数组

更新

我解决了

假设您已扩展AbstractTableGateway

$resultSet = $this->select();
foreach($resultSet as $row) { echo $row->yourProperty }

4 个答案:

答案 0 :(得分:6)

你应该像这样使用HydratingResultSet

class MyClassTable extends AbstractTableGateway
{
    public function __construct(Adapter $adapter)
{
    $this->adapter = $adapter;
    $this->resultSetPrototype = new HydratingResultSet();
    $this->resultSetPrototype->setObjectPrototype(new MyClass());
    $this->initialize();
}

public function fetchAll()
{
    $resultSet = $this->select();
    return $resultSet;
}

public function fetchAllToArray()
{
    $aData = $this->fetchAll()->toArray();
    return $aData;
}

答案 1 :(得分:3)

尝试使用

(array)$resultSet

我有时在ZF上使用它并且工作正常。

答案 2 :(得分:2)

你也可以尝试这个

$sql = new Sql($adapter);

$select = $sql->select();

$select->from('table');

$statement = $sql->prepareStatementForSqlObject($select); 

$results = $statement->execute();

$resultSet = new ResultSet();
$resultSet->initialize($results);

print_r($resultSet->toArray());

使用Zend \ Db \ ResultSet \ ResultSet;

答案 3 :(得分:2)

我的问题是@Fatmuemoo注意到的。

如果您注册自定义对象原型,请编码,例如

$resultSetPrototype = new ResultSet($entityClassName, new $entityClassName);
$instance->setResultSetPrototype($resultSetPrototype);

您必须在实体类中实现 toArray()方法。

public function toArray()
{
    return get_object_vars($this);
}