执行UNION查询时,如何让Zend Db返回行集而不是数组?

| 我有一个结果集,该结果集是MySQL UNION查询的结果。我用来获取数据的代码是:
$union_select = $PagesTable->getAdapter()->select()
        ->union(array(\'(\' . $legal_resources_select . \')\', \'(\' . $pages_select . \')\'));
$PagesTable->getAdapter()->fetchAll($union_select)
$PagesTable
扩展
Zend_Db_Table_Abstract
。完整的选择太大而无法在此处发布,我认为这与这个特定问题无关。如果我错了,请告诉我。 当前,这将返回结果数组,但我希望它返回一个行集对象。我还必须能够指定
$_rowClass
。这是必要的,因此我可以添加用于格式化和处理返回值的方法。 这可能吗?     
已邀请:
你不能。您要获取的结果集是一个组合,而不是数据库中的一组行,因此即使有可能,这也是一个非常糟糕的主意。 Zend_Db_Table比Active Record更实现了Table Data Gateway模式。 您描述的内容通常可以在Active Record下实现,为此,我建议您看一下教义1.2,而不是Zend_Db_Table。     
顺便说一句,如果要指定rowClass或rowsetClass,则可以通过调用以下方法使用Zend_Db_Table类来实现 使用Zend_Db_Table的方法
setRowsetClass
setRowClass
class RowTable extends Zend_Db_Table_Abstract {
    private static $_instance;
    protected $_name = \"tableName\";
    protected $_primary = \"primary_key_id\";

    # over-write the default class Zend_Db_Table_Rowset_Abstract
    # make sure the following classes are inside the include-path
    private function __construct($rowClass, $rowsetClass) {
        $this->setRowsetClass(\"ContributionList\");
        $this->setRowClass(\"Contribution\");
    }
}

$tableObject = new RowTable(\"RowClass\", \"RowsetClass\");
    
顺便说一句,我知道这确实很老了,但是进入此页面的人应该知道,一个
Zend_Db_Adapter
总是返回数组,因此当您使用,8ѭ方法时,您实际上正在远离表类并使用fetch包含在适配器类中的方法,该方法返回数组,而不是“ 9”返回数据网关模式下的对象。 因此,第一个答案是错误的,结果集将是一个包含许多行对象的行集,但没有所谓的数据混合功能,因此期望行对象上有许多冗余数据。 我看到很多工作的人都犯了这个错误,我想知道为什么这么多人使用
getAdapter
方法。还要提到的另一件事是,当您使用
getAdapter
获取选择对象时,您没有得到正确的选择对象,而是获取了
Zend_Db_Select
,并且需要一个
Zend_Db_Table_Select
,因此您可以使用by9ѭ方法使用
fetchAll
fetchRow
方法。 干杯。     

要回复问题请先登录注册