Функция запроса модели для 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 или, по крайней мере, отмените эти отношения, которые не нужны.