0

こんにちは、cakephp を使用してデータベースでユーザー名を検索しようとしています。ユーザー名はデータベースの主キーではありませんが、一意である必要があります。ここに検索機能用のコードがありますが、ケーキはそれが好きではありません。

    function index(){
    $this->User->recursive = 0;
    if ($this->data['users']['username']) { 
$this->set('users',  
$this->paginate('users', array('or' => array('users.username LIKE' => '%' .  )));
    else { 
$this->set('users', $this->paginate()); 
        }
        }
    }

データベースには ID (主キー) とユーザー名が含まれています。これの目的は、友達リクエストを送信することです。ユーザーはユーザー名を検索し、ユーザー名がそこにある場合、他のユーザーは関係受信ボックスで要求を受け取り、「はい」または「いいえ」を選択できます。

もう1つは、ユーザー名が存在する場合、users_usersというテーブルにデータを保存したいということです。検索が行われた後に何をすべきかを示すコードがないことに気付きました。しかし、私はこれを理解しようとして髪を引っ張っています。これについては、ウェブ上に多くのチュートリアルがないようです。

4

3 に答える 3

0

Cake のデフォルトは AND ですが、AND と OR または AND または OR の任意の階層を指定できます。頭がくらくらするまでは :)

検索はおそらく次のようにフォーマットできます。

    'or' => array( 
        'Model.column1 LIKE' => '%keyword%', 
        'Model.column2 LIKE' => '%keyword'
于 2012-05-24T14:16:00.157 に答える
0

間違っているかもしれませんが、なぜ「%」の横にドットがあるのですか? ドットは文字列連結演算子であり、2 番目の引数として何も提供していません。また、OR 条件を入れていますが、引数は 1 つしかありません。だからこれを試してください:

  function index(){
        $this->User->recursive = 0;
        if ($this->data['users']['username']) { 
              $this->set('users',  
                    $this->paginate('users', array('users.username LIKE' => '%')));
        }
        else { 
              $this->set('users', $this->paginate()); 
        }
  }

お役に立てれば

于 2012-05-24T13:49:08.700 に答える
0

入力時にユーザー名を検証して、ユーザー名が一意であることを確認してください。 http://book.cakephp.org/2.0/en/models/data-validation.html

よくわかりませんが、この users.username は、ユーザー名をjointableの外部キーとして使用しているようです!? それは完全に間違っています。

仮にそうだったとしても、表記が間違っていて、CakePHP の標準に準拠していないため、動作しません。その場合、それは User.username である必要があります。

CakePHP のブログ チュートリアルからやり直して、本を読むことをお勧めします。

于 2012-05-24T13:45:25.397 に答える