CakePHP Filter Component - правильное использование для фильтрации периода времени - PullRequest
0 голосов
/ 01 декабря 2011

Я совершенно новичок в CakePHp и в мышлении MVC.

Впервые я смог создать Resultsetfiltering, успешно используя компонент Filter by Nik Chankov.

То, как я его использую, это вызвать его в моем контроллере, сохранив оператор условия и передав его в мой Paginator.

Теперь у меня есть один столбец, в котором содержится дата create_at, и я хочу дать пользователю возможность ввести дату начала и дату окончания и передать ее компоненту фильтра.

Я попытался создать два поля ввода 'create_after' и 'creation_before' и соединить их с массивом [creation_at] [BETWEEN] в моем контроллере, поскольку компонент Filter обрабатывает 'BETWEEN'.К сожалению, если я сброшу исходные значения create_before и _after, они не будут сохранены в сеансе компонентом фильтра, и если я не получу ошибку SQL, так как компонент создаст оператор, включающий в себя «selected_after» и selected_before »которые не определены в моей базе данных.

Каков будет правильный способ сделать это?Пожалуйста, дайте мне совет, как и в каком направлении я должен действовать, чтобы решить эту проблему ...

1 Ответ

0 голосов
/ 04 декабря 2011

В идеале вы должны добавить логику в вашу модель, чтобы защитить ее от неправильного использования контроллером.

В вашей модели есть предопределенные функции обратного вызова, которые вы можете использовать для изменения данных запроса до выполнения поиска,Звучит так, как будто вы хотите добавить немного логики в метод beforeFind ().

поваренная книга: http://book.cakephp.org/view/1049/beforeFind API: http://api13.cakephp.org/class/model#method-ModelbeforeFind

Без примера кода трудно предложитьточное решение, но как-то так:

// app/models/yourmodel.php
beforeFind() {
    if(/*yourlogic*/) {
        unset($queryData['yourmodel']['created_after'];
        unset($queryData['yourmodel']['created_after'];
    }
}
...