按引用列对Zend_Db_Table行集进行排序

时间:2011-06-03 11:12:14

标签: zend-framework zend-db-table table-relationships

我知道我可以通过_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'))

这意味着,我需要连接表并按列排序,而列不在模型表中。

感谢您的帮助

1 个答案:

答案 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查询。它更麻烦,但它可以工作。