Я пытаюсь реализовать поиск, в котором все поля являются необязательными, поэтому я должен фильтровать свои результаты на основе ввода пользователем, но я зациклился на том, как это сделать …
Поле поиска выглядит следующим образом
1) serach по электронной почте:
2) serach по имени:
3) serach по дате регистрации: (т.е. fromDate и toDate)
варианты 1) и 3) я могу достичь, поскольку требуется только условие И.
проблема с вариантом 2) имя должно совпадать с именем first_name или last_name, поэтому у меня должно быть условие ИЛИ, которое я не могу найти в правильном порядке.
Примечание. Все поля являются необязательными …
heres мой фрагмент кода ….
$conditions = array(); if(!empty($this->request->data['searchbyemail'])) { $conditions[] = array('User.username' => $this->request->data['searchbyemail']); } if(!empty($this->request->data['regfromdate']) && !empty($this->request->data['regtodate'])) { $conditions[] = array('User.created BETWEEN ? AND ?' => array($this->request->data['regfromdate'], $this->request->data['regtodate'])); } if(!empty($this->request->data['searchbyname'])) { $conditions[] = array( 'OR' => array( 'User.first_name' => $this->request->data['searchbyname'], 'User.last_name' => $this->request->data['searchbyname'] )); } $this->paginate = array('conditions' => $conditions); $this->set('users', $this->paginate());
Запрос, который я пытаюсь достичь, должен выглядеть так:
SELECT * FROM `users` AS `User` WHERE `User`.`username` = 'a' AND `User`.`created` BETWEEN '2013-02-01' AND '2013-02-05' AND ((`User`.`first_name` LIKE '%b%')) OR ((`User`.`last_name` LIKE '%b%'))
Я могу генерировать этот запрос в cakephp, но его статический, я ищу динамический способ генерации этого запроса, поскольку поля поиска являются необязательными и запрос должен изменяться в соответствии с пользовательским вводом …..