9

我只是试图通过扩展 ZendAbstractTableGateway并利用继承的select()函数来获取给定表中的所有记录。此select()函数返回 Zend 类型ResultSet,但是我无法使用toArray().

我收到以下消息:

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

更新

我解决了

假设您已扩展 AbstractTableGateway

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

4 回答 4

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;
}
于 2013-05-30T13:51:37.117 回答
4

你也可以试试这个

$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;

于 2013-09-30T19:57:13.220 回答
3

只是尝试使用

(array)$resultSet

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

于 2013-02-21T14:31:29.327 回答
2

我的问题正如@Fatmuemoo 指出的那样。

如果您注册自定义对象原型,例如代码。

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

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

public function toArray()
{
    return get_object_vars($this);
}
于 2015-12-15T10:51:03.250 回答