подготовить мою модель для разбивки результатов в CakePHP - PullRequest
0 голосов
/ 21 февраля 2012

Я обнаружил, что в некоторых методах моего контроллера мне приходится разбивать результаты на страницы только с одним или двумя условиями, меняющимися между методами.Я также нуждался в опции, чтобы НЕ разбивать на страницы время от времени.Как полный новичок в программировании, я хотел бы попрактиковаться в DRY, и поэтому я изучил, как подготовить свою модель к возможному разбиванию на страницы, прежде чем кодировать в контроллере.Я начал строить свой запрос в моей модели, основываясь на ответе на этот вопрос переполнения стека .К сожалению, тот, кто задал вопрос, не включил первую часть своего кода, поэтому я действительно растерялся из-за того, как выглядит первая часть их модельного запроса.Когда я использую код ниже, я получаю две недопустимые ошибки типа смещения на модели.Ниже код моей модели:

<?php class Unit extends AppModel {
public $name='Unit';
public $actsAs = array('Containable');
public $belongsTo=array(
'User',
'Complex',

'Location',
);

public $hasOne=array(
    'Image'
    );
function getListings() {
    $paginate=array();
        $qOptions=array();
    $this->contain(array(
                    'User'=>array('id'),
                    'Location',
                    'Complex',
                    'Image'
                    )
            );
    if($paginate) {
        return $qOptions;
        }
    else {

        $data= $this->find('all', $qOptions);
        return $data;
    }
}
}
?>

вот мой метод контроллера:

<?php
class LodgingsController extends AppController {
    public $name='Lodgings';

    public $layout='pagelayout';
    public $uses=array('User', 'Unit', 'Location');
    public $helpers=array('Text','Html','Js','GoogleMapV3');

    public $paginate=array();


public function debug() {

   $qOptions=array('conditions'=>array('Unit.active'=>1, 'Unit.type'=>'condo'), 'limit'=>9, 'order'=>array('Unit.id'=>'asc'));
   $opts['paginate'] = true;
   $paginateOptions=$this->Unit->getListings($opts);
   $this->paginate=$paginateOptions;
   $stuff=$this->paginate('Unit');
   $this->set('units', $stuff);



}

}
?>

1 Ответ

1 голос
/ 21 февраля 2012

Лично я считаю, что в том, как вы пытаетесь это сделать, много накладных расходов.Модель достаточно проста для вызова нумерации страниц с контроллера.Мой первый выбор будет держать его в контроллере.Если бы логика была более сложной, я бы сказал, переместите ее.Но то, что вы делаете, прямо вперед.Вот как бы я это сделал в контроллере.

<?php

function yourFunction() {
    $this->Model->recursive = -1;
    if ($paginate == 'true') {
        $this->set('models', $this->paginate(set_options_here));
    } else {
        $this->set('models', $this->Model->find('all', array(set_options_here));
    }
}
?>
...