如何使用通配符搜索从CakePHP中的scaffolding中获取列表?

如何使用通配符搜索从CakePHP中的scaffolding中获取列表?,php,cakephp,Php,Cakephp,我已经为CakePHP构建了一个脚手架,但是需要有一种方法,用户可以在文本框中键入部分姓氏,单击按钮,然后将要筛选的人员列表进行通配符搜索 我正在为示例代码而奋斗。有人有吗?您需要看看CakePHP提供的findby方法 除了标准findAll之外,您还有许多神奇的findby方法,允许您在表中指定要搜索的列: $this->User->findBySurname($surname); 您还有findBySqlstatement,它允许您使用自定义SQL语句。您可以使用它执行类似的

我已经为CakePHP构建了一个脚手架,但是需要有一种方法,用户可以在文本框中键入部分姓氏,单击按钮,然后将要筛选的人员列表进行通配符搜索


我正在为示例代码而奋斗。有人有吗?

您需要看看CakePHP提供的findby方法

除了标准findAll之外,您还有许多神奇的findby方法,允许您在表中指定要搜索的列:

$this->User->findBySurname($surname);
您还有findBySqlstatement,它允许您使用自定义SQL语句。您可以使用它执行类似的语句,如下所示:

$users = $this->User->findBySql("SELECT * FROM USERS u WHERE u.SURNAME LIKE '%" . $surname . "%' ORDERBY SURNAME");
这将返回一个匹配用户的列表,然后可以显示给用户。这不是最有效的查询,但它可以工作

views/users/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>

-1用于等待发生的sql注入。我想你没有抓住重点,我说过你可以用上面的陈述,而不是说这是给定的解决方案。上面的代码是使用findBySql朝着正确的方向发展的一点……这一点比这更广泛,来自搜索引擎的人很可能会将代码复制到他们的应用程序中。我认为这完全是开发人员的问题,而不是我在这里概述的一系列要点。。。呵呵。。。
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'));
}