У меня есть эшафот, построенный для CakePHP, но для того, чтобы пользователи могли набирать часть фамилии в текстовое поле, нажмите кнопку и список людей, которые будут отфильтрованы для поиска по шаблону.
Я боюсь, например, кода. Кто-нибудь есть?
просмотров / пользователей / index.ctp
<fieldset> <legend>Filter users</legend> <?php echo $form->create('User', array('action' => 'index')); echo $form->input('surname', array('div' => false)); echo $form->submit('Filter', array('div' => false)); echo $form->end(); ?> </fieldset>
Контроллеры / users_controller.php
public function index($surname = null) { // post-redirect-get if ($this->data['User']['surname']) { $this->redirect(array('id' => $this->data['User']['surname'])); } // conditions $conditions = null; if ($surname) { $conditions = array('surname LIKE' => '%' . $surname . '%'); } // find $users = $this->Users->find('all', array('conditions' => $conditions)); // set $this->set(compact('users')); }
Вам нужно посмотреть методы поиска, которые предоставляет CakePHP.
в дополнение к вашему стандарту findAll () у вас есть несколько «магических» методов поиска, которые позволяют вам указать столбец в таблице для поиска по:
$this->User->findBySurname($surname);
У вас также есть findBySql (statement), который позволяет вам использовать пользовательский оператор SQL. Вы можете использовать это для выполнения инструкции LIKE следующим образом:
$users = $this->User->findBySql("SELECT * FROM USERS u WHERE u.SURNAME LIKE '%" . $surname . "%' ORDERBY SURNAME");
Это вернет вам список подходящих пользователей, которые вы сможете отобразить пользователю. Это не самый эффективный запрос, но он работает.