Cakephp Pagination как использовать или условие

Я пытаюсь отфильтровать рецепты, используя поиск в компоненте paginator. Но он ищет только в столбце заголовка таблицы рецептов. Я хочу, чтобы он также выполнял поиск в столбце body и столбцах тегов таблицы recipes.

В контроллере

$this->Paginator->settings = $this->paginate;
$this->Paginator->settings['limit']=$this->pageLimit;
$this->Paginator->settings['maxLimit']=$this->maxLimit;
$this->Paginator->settings['conditions'] = $this->Recipe->parseCriteria($this->Prg->parsedParams());

когда я заглянул в $this->Paginator->settings['conditions'], это выглядело так

Array
(
    [Recipe.title LIKE] => %chocolate%
)

Я хочу расширить условия, чтобы также просматривать несколько столбцов таблицы рецептов, больше похожих на Recipe.title LIKE, Recipe.body LIKE и Recipe.tags LIKE.


person Lizzy M    schedule 08.11.2017    source источник


Ответы (1)


Вам нужно использовать пользовательскую функцию в вашей модели.

public $filterArgs = array(
    'filter' => array(
        'type' => 'query',
        'method' => 'orConditions'
    ),
);

public function orConditions($data = array()) {
    $filter = $data['filter'];
    $condition = array(
        'OR' => array(
            $this->alias . '.title LIKE' => '%' . $filter . '%',
            $this->alias . '.body LIKE' => '%' . $filter . '%',
            $this->alias . '.body LIKE' => '%' . $filter . '%',
        )
    );
    return $condition;
}
person shahonseven    schedule 12.11.2017