libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

データ検索をマスターする! (2/6)

作成:2015-10-03 08:58
更新:2015-10-03 09:19

■AND/OR検索

ここまで、検索はすべて「1つの条件を設定し、それに合うものを検索する」というやり方でした。が、時には複数の条件を設定したい場合もあります。例えば、Personsなら、「検索文字が、nameかmailのどちらかにあるものを検索する」というような場合はどうすればいいんでしょう?

こうした「複数の条件」を利用するために、Queryには2つのメソッドが用意されています。それぞれの働きをここでまとめましょう。


●AND検索する
《Query》->andWhere( 条件文 , 値 );
複数の条件を設定したい場合に使うものです。これは、whereで設定した条件と、別の条件の両方が成立するものだけを取り出したい場合に使います。使い方は基本的にwhereと同じです。例えば、
~->where(○○)->andWhere(△△);
このようにすると○○△△の両方の条件に合うものだけが検索されます。

●OR検索する
《Query》->orWhere( 条件文 , 値 );


これも複数の条件を設定するのに使います。こちらは、whereで設定した条件と別の条件のどちらか片方が成立すれば検索する、という場合に用います。例えば、
~->where(○○)->andWhere(△△);
このようにすると○○△△のどちらかの条件が合えばすべて検索します。

では、これらの利用例を下にあげておきましょう。ここでは、フィールドに検索テキストを書いて送信すると、namemailのどちらかにそのテキストを含むものをすべて検索します。また検索された最初と最後のエンティティのname、検索されたエンティティ数を最初にメッセージとして表示します。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

public function find() {
    $this->set('msg', null);
    $persons = [];
    if ($this->request->is('post')) {
        $find = $this->request->data['find'];
        $persons = $this->Persons->find()
            ->where(["name like " => '%' . $find . '%'])
            ->orWhere(["mail like " => '%' . $find . '%']);
    }
    $this->set('persons', $persons);
}

※関連コンテンツ

「初心者のためのCakePHP3 プログラミング入門」に戻る