从Zend_Db_Table_Abstract返回的数组中选择?

时间:2013-11-12 10:34:23

标签: arrays zend-framework

这种形式的简单选择:

            $select = $this->select();
            return $rowset = $this->fetchAll($select);

现在,数组中有一个继承列,因此表的格式为:

   id   |   role   |   inherits   |
   1    |   admin  |    2         |
   2    |   player |    3         |

当显示时,我希望继承列显示它实际上从中继承的角色而不是id。

Zend_Db_Table_Abstract返回的数组非常复杂,所以我不能只说:

$array[0][inherits]

1 个答案:

答案 0 :(得分:1)

首先$ this-> fetchAll不会返回数组,它将返回Zend_Db_Table_Rowset_Abstract个对象。您可以在Zend_Db_Table_Rowset Zend Docs中了解详情。

您可以将其作为对象获取数据

// use Zend_Db_Table_Row_Abstract object
$array[0]->inherits

或者如果你想获得一个数组,你可以这样做:

// get rowset and convert it to array
$rowset = $this->fetchAll($select);
$data = ($rowset) ? $rowset->toArray() : array();

更好的解决方案是在同一个表上编写左连接,并在没有任何PHP代码的情况下在数据集中获取角色。

$sql = $this->getAdapter()->select()
        ->from(array('r1' => 'your_roles_table'), '*')
        ->joinLeft(array('r2' => 'your_roles_table'), 'r2.id = r1.inherits', array(
            'inherits_role' => 'r2.role',
        ));

$data = $this->getAdapter()->fetchAll($sql);
var_dump($data);