问题描述
|
我有一个结果集,该结果集是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
方法。
干杯。