0

我有一个为 CakePHP 构建的脚手架,但需要有一种方法让用户在文本框中输入部分姓氏,单击按钮并将人员列表过滤到通配符搜索。

我正在为示例代码而苦苦挣扎。有人有吗?

4

2 回答 2

0

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

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

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

您还有 findBySql(statement) 允许您使用自定义 SQL 语句。您可以使用它来执行 LIKE 语句,如下所示:

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

这将为您返回匹配用户的列表,然后您可以将其显示给用户。这不是最有效的查询,但它有效。

于 2009-03-27T00:25:40.920 回答
0

视图/用户/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'));
}
于 2009-03-27T02:31:19.637 回答