0

私は CakePHP 用に構築された足場を持っていますが、ユーザーが姓の一部をテキスト ボックスに入力し、ボタンをクリックし、人のリストをワイルドカード検索にフィルターする方法が必要です。

サンプルコードに苦労しています。持ってる人いる?

4

2 に答える 2

0

CakePHPが提供するfindbyメソッドを確認する必要があります。

標準のfindAll()に加えて、検索するテーブルの列を指定できる「魔法の」findbyメソッドがいくつかあります。

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

カスタムSQLステートメントを使用できるfindBySql(statement)もあります。これを使用して、次のように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 に答える