2009-03-27 5 views
0

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

私はサンプルコードのために苦労しています。誰かいくつか持っていますか?

答えて

0

ビュー/ユーザー/ index.ctp起こるのを待って、SQLインジェクションのための

<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

CakePHPが提供するfindbyメソッドを調べる必要があります。あなたの標準のfindAll(に加えて

)あなたがで検索するテーブルの列を指定することができ、「魔法」findbyメソッドの数を持っている:

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

あなたはまたfindBySql(声明)を持っていますカスタムSQL文を使用することができます。あなたは、ユーザーに表示することができます一致するユーザーのリストを返します

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

を次のように次のような文を実行するためにこれを使用することができます。これは最も効率的なクエリではありませんが、機能します。

+1

-1。あなたがそれを修正したら投票を反対にします。 –

+0

私はあなたがポイントを逃したと思う、私はあなたが "上記のようなステートメントを使用する"ことができた - これは与えられた解決策ではないと言いました。上記のコードは、findBySqlを使用して正しい方向のポイントです... – Jon

+1

ポイントはそれよりも広く、検索エンジンから来る人は、アプリケーションにコードをコピーする可能性がかなりあります。 –

関連する問題