[英]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.