我知道我可以通过_referenceMap定义关系,我知道我会加入选择低谷
$db->select()
但我需要的是在扩展Zend_Db_Table_Abstract
的模型中获取rowset,然后按照另一个表中引用列的值对其进行排序。
是否有一些解决方法可以做到这一点?
修改
继承人就是一个例子:
第一张表:
表错误列 id , bugname , authorid
第二张表:
表作者列 id , authorname
我有一个模型Model_Bugs extends Zend_Db_Table_Abstract
我想做这样的事情:
$model->fetchAll($model->select()->order('authorname ASC'))
这意味着,我需要连接表并按列排序,而列不在模型表中。
感谢您的帮助
扬
答案 0 :(得分:0)
我会在Model_Bugs
中添加一个方法,如下所示:
public function fetchBugsByAuthorname() {
$bugTable = $this;
$bugTableName = $this->info('name');
$authorsTable = new Model_Authors();
$authorsTableName = $authorsTable->info('name');
$select = $bugTable->select()
->setIntegrityCheck(false)
->from($bugTable, array('id', 'bugname', 'authorid'))
->join($authorsTableName,
"$bugTableName.authorid = $authorsTableName.id",
array("authorname"))
->order("$authorsTableName.authorname asc");
$result = $bugTable->fetchAll($select);
return $result;
}
但要做到这一点,你必须关闭ZF的表完整性检查(上面setIntegrityCheck(false)
),这意味着你将无法直接在结果行上调用save()
。但是,如果它是为了只读目的,它将起作用。
如果您需要将行集保存回数据库,则可能必须先按照所需的顺序从Model_Authors
中选择作者ID,然后相应地重新排序Model_Bugs
查询。它更麻烦,但它可以工作。