Как мне заставить запросы PagerDefault корректно работать с Drupal 7?

#php #drupal #drupal-7

#php #drupal #drupal-7

Вопрос:

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

 $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 полностью игнорируется. Я вывожу тему («пейджер») дальше в выводе, так что это не проблема.

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

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

Приветствия

Ответ №1:

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

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

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

Ответ №2:

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

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