【问题标题】:Selecting from a Zend_Db_Table_Abstract returned array?从 Zend_Db_Table_Abstract 返回的数组中选择?
【发布时间】:2013-11-12 10:34:23
【问题描述】:

这种形式的简单选择:

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

现在,数组中有一个继承列,所以表格的形式是:

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

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

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

$array[0][inherits]

【问题讨论】:

    标签: arrays zend-framework


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      相关资源
      最近更新 更多