Совершенная пагинация Zend без zend_db_select - PullRequest
1 голос
/ 14 марта 2011

Это всего лишь пример, но большинство запросов в моем приложении выглядят так:

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'. Есть ли какие-то способы обойти это, или я должен реализовать свою собственную функцию нумерации страниц?

Ответы [ 2 ]

0 голосов
/ 15 марта 2011

Я использую что-то похожее на следующую модель zend_db_select, и она работает с нумерацией страниц

$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);
0 голосов
/ 14 марта 2011

Нет способа получить строку SQL в объект Zend Select. Для этого вам понадобится парсер SQL, а у ZF этого нет.

Вы должны были бы реорганизовать операторы в объект Zend Select, это может быть очень раздражающим и трудным время от времени, я не делал этого в моем первом проекте ZF. Хотелось бы, чтобы я сделал это сейчас, так как это лучший способ сделать это и гарантировать, что вы можете воспользоваться всеми преимуществами, например, пагинация.

...