繁体   English   中英

在没有zend_db_select的情况下执行zend分页

[英]Performant zend pagination without zend_db_select

这只是一个例子,但是我的应用程序中的大多数查询都是这样的:

public function getCommentsByPost($postid)
{
$db = Zend_Registry::get('db');
$sql = 'SELECT * FROM comments c
        LEFT JOIN users u ON u.user_id = c.comment_userid
        WHERE c.comment_postid = ?';
$statement = $db->query($sql, array($postid));
$rows = $statement->fetchAll();
$comment = null;
foreach($rows as $row){
    $comment = new Model_Comment();
    $comment->populate($row);
    $this->list[] = $comment;
}
return $this->getList();
}

我不使用zend_db_select,因为通常涉及很多联接,并且查询非常复杂。 但是我需要为页面列表添加分页,而且恐怕使用数组适配器不会非常有效,因为Zend将从“ posts”表中选择每一行。 有什么解决办法,还是应该实现自己的分页功能?

无法将SQL字符串放入Zend Select对象。 为此,您需要一个SQL解析器,而ZF没有。

您必须将语句重构到Zend Select对象中,这有时会很烦人并且很困难,我在我的第一个ZF项目中并没有这样做。 我希望我现在已经做过,因为这是最好的方法,并且可以确保您可以利用所有其他功能(例如分页)。

我在zend_db_select模型中使用类似于以下内容的方法,并且可以在zend分页中使用

$select = $this->model->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
                ->setIntegrityCheck(false);
$select->where('table1.field = ?', $field)
       ->join('table2','table1.field = table2.feild')
       ->where('table2.field = ?', $field)
       ->order('field DESC');
$object = $this->model->fetchAll($select);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM