Как мне заставить запросы PagerDefault корректно работать с Drupal 7? - PullRequest
6 голосов
/ 03 октября 2011

Я использую следующий код:

$query = db_select('taxonomy_index', 'ti')
  ->fields('ti', array('nid'))
  ->condition('ti.tid', $term->tid)
  ->condition('n.status', 1);

$query->join('node', 'n', 'n.nid = ti.nid');

$query->extend('PagerDefault')->limit(2);

$nids = $query->execute()->fetchCol();

но пейджер не работает: каждый элемент из запроса возвращается, как будто вызов PagerDefault полностью игнорируется. Я выводлю тему ('пейджер') дальше вниз, поэтому это не проблема.

Это не единственный пример этого сбоя, который у меня есть, в некоторых других проектах подобные запросы также возвращают полное количество результатов каждый раз.

Я прочитал всю документацию, похоже, она работает иногда, а не в другой раз. У кого-нибудь есть идеи?

Приветствия

Ответы [ 2 ]

18 голосов
/ 04 октября 2011

Это не имеет значения , когда вы вызываете extend().

Единственное, что важно, это то, что вы используете новый объект, возвращенный extend().Причина этого в том, что extend() создает новый объект, который оборачивает текущий объект (шаблон Decorator).

Итак, вам нужно использовать $query = $query->extend('PagerDefault'), как вы делаете в своем ответе (в сочетании с другими вызовами).

7 голосов
/ 13 октября 2011

Это не работает, потому что вы должны сделать

$query = $query->extend('PagerDefault')->limit(2);
...