Поиск плагина cakephp Использование CakeDC

Я использую плагины поиска cakephp версии 2.0 от cakeDC (с cakephp 2.x) (https://github.com/CakeDC/search). Мне нужен поиск по многим моделям, но эти модели не связаны между собой. Итак, я создаю новую модель (поиск) и контроллер (поиск). я получил эту ошибку

«Уведомление (8): косвенное изменение перегруженного свойства SearchesController::$paginate не имеет никакого эффекта [APP/Controller/SearchesController.php, строка 17]»

Модель:

App::uses('AppModel', 'Model');
class Search extends AppModel {
    public $actsAs = array('Search.Searchable');
    public $useTable = false;
    public $filterArgs = array(
        'terminada' => array(
            'type' => 'like',
            'field' => array(
                'Sludge.terminada',
                'SurfacesWater.terminada',
                'ResidualWater.termianda',
                'UndergroundWater.terminada',
                'PotableWater.terminada',
                'SpecifiedsResidualsWater.terminada'
            )
        ),
        'revisada' => array(
            'type' => 'like',
            'field' => array(
                'Sludge.revisada',
                'SurfacesWater.revisada',
                'ResidualWater.revisada',
                'UndergroundWater.revisada',
                'PotableWater.revisada',
                'SpecifiedsResidualsWater.revisada'
            )
        ),
        'eliminada' => array(
            'type' => 'like',
            'field' => array(
                'Sludge.eliminada',
                'SurfacesWater.eliminada',
                'ResidualWater.eliminada',
                'UndergroundWater.eliminada',
                'PotableWater.eliminada',
                'SpecifiedsResidualsWater.eliminada'
            )
        ),
    );
    public function orConditionsDates($data = array()) {
        $start = date('Y-m-d');
        $end = date('Y-m-d', strtotime('-1 month'));
        $cond = array(
            'OR' => array(
                $this->alias . '.monitoreofecha LIKE <=' => $end,
                $this->alias . '.monitoreofecha LIKE >=' => $start,
                ));

        return $cond;
    }
}

Контроллер:

App::uses('AppController', 'Controller');
class SearchesController extends AppController {
    public $components = array('Search.Prg');
    public $presetVars = true; // using the model configuration
    public function index() {
        $this->Prg->commonProcess();
        $this->paginate['conditions'] = $this->Search->parseCriteria($this->passedArgs);
        $this->set('searches', $this->paginate());
    }
}

Представление такое же, как и у любого индекса, созданного с помощью выпечки. Есть идеи, в чем моя ошибка? Спасибо за все!!

S.


person ssalvatori    schedule 25.09.2012    source источник


Ответы (2)


если вы сделаете это таким образом, вам нужно сначала объявить paginate в вашем контроллере:

public $paginate = array();

или инициализируйте его напрямую в своем методе

 $this->paginate = array();
person mark    schedule 25.09.2012

Попробуйте сделать это следующим образом: App::uses('AppController', 'Controller');

class SearchesController extends AppController {
  public $components = array('Search.Prg');

  public $presetVars = true; // using the model configuration    

  public $paginate = array();

  public function index() {

    $this->Prg->commonProcess();

    $cond = $this->Search->parseCriteria($this->passedArgs);

    $this->set('searches', $this->paginate('Search', $cond));
  }
}
person Grzegorz Motyl    schedule 25.09.2012
comment
Теперь у меня много предупреждений array_keys() ожидает, что параметр 1 будет массивом, заданным null [CORE/Cake/Model/Datasource/DboSource.php, строка 2296]. Проблема в том, что $this->Search->parseCriteria($this -›passedArgs); вернуть пустой массив. - person ssalvatori; 25.09.2012
comment
ты пробовал мою текущую голову? github.com/dereuromark/search кажется, я исправил несколько вещей. - person mark; 25.09.2012
comment
PS: где именно значение NULL вместо массива. там источник проблемы. какой-то метод возвращает не массив для пустого. если вы можете помочь мне найти этот метод, я могу помочь исправить его. хотя никогда не было этой проблемы до сих пор. - person mark; 25.09.2012
comment
отметьте, у меня тот же результат pr ($ cond), результат - массив (). В меню есть и другие ошибки. array_keys() ожидает, что параметр 1 будет массивом, значение null задано [CORE/Cake/Model/Datasource/DboSource.php, строка 2296] . Проблема в том, что в моей модели нет таблицы, и я пытаюсь получить результат от других модулей. - person ssalvatori; 26.09.2012
comment
да, вам нужно использовать в вашем массиве страниц: $this->paginate['contain'] = array(...) и не забудьте включить необходимые модели. - person mark; 26.09.2012