Функция запроса модели для контроллера :: как я могу вызвать w / pagination в контроллере? - PullRequest
1 голос
/ 21 января 2011

Я не могу решить, как вызвать функцию запроса модели в контроллер.Я прошел слишком много документации, чтобы сосчитать.Может я ошибаюсь в том, что пытаюсь сделать вообще?Продолжайте получать ошибки MySQL (ошибки ниже).

Plan :: Model:

function getActive() 
{
$findParameters = array(
    'limit' => 10,
    'order' => array('Plan.monthly_cost' => 'asc'),
    'conditions' => array('PlanDetail.active' => 1)
);
return $this->find('all', $findParameters);
}

Plan :: Controller:

function search() {
    $this->Plan->recursive = 2; //*** Modified by Jason: Recursion needs to be corrected with better method. ***//
    $active = $this->Plan->getActive();
    $this->set('plans', $this->paginate($active));
}

Примечание (8): преобразование массива в строку [ROOT .... Предупреждение (512): ошибка SQL: 1054: неизвестный столбец «План» в «предложении где»

1 Ответ

1 голос
/ 22 января 2011

В основном $ this-> paginate не принимает результат запроса в качестве первого параметра. Если вам так нравится, что ваша логика БД в модели делает это следующим образом:

Модель

function getActiveConditions() {
    retrun array(
       'limit' => 10,
       'order' => array('Plan.monthly_cost' => 'asc'),
       'conditions' => array('PlanDetail.active' => 1)
    );
}

в вашем контроллере:

function search() {
    $this->Plan->recursive = 2;
    $activeConditions = $this->Plan->getActiveConditions();
    $this->set('plans', $this->paginate($this->Plan, $activeConditions));
}

Объяснение: метод paginate разбивает на страницы модель, переданную в качестве первого аргумента (или, если он равен null, это модель контроллера по умолчанию) и использует второй параметр, чтобы применить некоторые ограничения к результату.

Установите флажок «Содержимое» для этой рекурсии = 2 или, по крайней мере, отмените эти отношения, которые не нужны.

...