Эффективная нумерация страниц с CakePHP - PullRequest
0 голосов
/ 27 июля 2011

У меня «архитектурная» проблема с CakePHP: p.

Мне нужно разбивать запросы на страницы, что кажется простым, я использую массив $ paginate и метод paginate, но у меня много ограничений.

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

Как правильно установить разные правила пагинации для разных методов?

(я думал об использовании разных массивов и назначении $ paginate определенного массива во время выполнения, но я хочу знать, есть ли «официальный способ» сделать это)

Ответы [ 2 ]

1 голос
/ 27 июля 2011

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

Вы можете указать различные наборы нумерации страниц:

var $paginate = array(
   'Recipe' => array (...),
   'Author' => array (...)
);

, затем $data = $this->paginate('Recipe');

http://book.cakephp.org/view/1232/Controller-Setup

0 голосов
/ 27 июля 2011

Я не знаю, если это то, что вы уже делаете, но я думаю, что это уже достаточно чисто:

function foo() {
    $this->paginate['fields'] = array('field_1', 'field_2');
    /* rest of the method */
}
function bar() {
    $this->paginate['fields'] = array('field_3', 'field_4');
    /* rest of the method */
}

Если есть поля, которые вы собираетесь использовать во всех методах, которые вы могли быи сделайте это так:

var $paginate  = array (
    'fields' => array('always_need_this', 'also_need_this_always',)
);
function foo() {
    array_push($this->paginate['fields'], 'only_in_foo', 'also_only_in_foo');
    /* rest of the method */
}
function bar() {
   array_push($this->paginate['fields'], 'only_in_bar', 'also_only_in_bar');
    /* rest of the method */
}
...