Как я могу использовать поиск по шаблону, чтобы получить список из скаффолдинга в CakePHP? - PullRequest
0 голосов
/ 27 марта 2009

У меня есть скаффолд, созданный для CakePHP, но мне нужно, чтобы пользователи могли вводить часть фамилии в текстовое поле, нажимать кнопку и фильтровать список людей для поиска по шаблону.

Я борюсь за пример кода. У кого-нибудь есть?

Ответы [ 2 ]

0 голосов
/ 27 марта 2009

просмотров / пользователей / 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'));
}
0 голосов
/ 27 марта 2009

Вам нужно взглянуть на методы findby, которые предоставляет CakePHP.

в дополнение к вашему стандартному findAll () у вас есть несколько «волшебных» методов findby, которые позволяют вам указать столбец в таблице для поиска:

$this->User->findBySurname($surname);

У вас также есть findBySql (оператор), который позволяет вам использовать пользовательский оператор SQL. Вы можете использовать это для выполнения инструкции LIKE следующим образом:

$users = $this->User->findBySql("SELECT * FROM USERS u WHERE u.SURNAME LIKE '%" . $surname . "%' ORDERBY SURNAME");

Это вернет вам список подходящих пользователей, который вы затем сможете отобразить пользователю. Это не самый эффективный запрос, но он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...