我只是尝试通过扩展Zend AbstractTableGateway
并使用继承的select()
函数来获取给定表中的所有记录。这个select()
函数返回类型Zend ResultSet
但是我无法使用toArray()
获得一系列结果。
我收到以下消息:
作为此DataSource的一部分的行,类型对象无法转换为数组
我解决了
假设您已扩展AbstractTableGateway
$resultSet = $this->select();
foreach($resultSet as $row) { echo $row->yourProperty }
答案 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);
}