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

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

План:: Модель:

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

План:: Контроллер:

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 ответ

Решение

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

Поставьте флажок "Содержимое" для этого рекурсивного значения =2 или, по крайней мере, отмените эти отношения, которые не нужны.

Другие вопросы по тегам