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

データベース検索の基本 (2/5)

作成:2015-09-26 10:18
更新:2015-09-26 10:32

■findメソッドとwhereメソッド

では、検索について説明していきましょう。レコードの検索は、実は既にやっています。先にindexアクションを作成する際、こういうものを使いましたね。
$this->Persons->find('all')

これは、全レコードをエンティティ配列として取り出すものでした。find('all')というもので、すべてのエンティティを得ることができました。

この「find」というのが、検索の基本となるものです。indexでは引数に'all'を指定しましたが、引数無しで使うと、一般的な検索を行うためのメソッドとして機能します。

このfindは、「Query」というクラスのインスタンスを返値にします。Queryは、検索のための諸設定を管理するクラスです。このQueryにあるメソッドを呼び出すことで、検索の条件などを指定できます。

この「Queryを作成して細かな検索の条件を設定していく仕組み」は、CakePHP3に搭載されている「Query Builder」と呼ばれるものです。Queryを使って、「いかにして検索に関する設定を追加していくか」で複雑な検索を作成していくことができます。

この検索条件の設定で、もっとも基本となるメソッドは「where」というものでしょう。これは、以下のように記述します。
《Query》->where( 条件文 , 値 );

第1引数には、条件となる文を記述します。これは、条件式の「値以外の部分」といっていいでしょう。そして、値となるものが第2引数に指定されます。

例えば、「idが1のもの」なら、「id = 1」というように条件を設定します。この「1」より前の部分が第1引数、「1」が第2引数になります。「1」という数値の代りに、変数$idを使って値を指定するなら、
《Query》->where('id = ', $id)

こんな感じになるわけですね。基本的に、条件となる文は、比較演算子(=<>といった記号で2つの値を比較するためのもの)を使った式をイメージするといいでしょう。

では、簡単なサンプルを下のリスト欄にあげておきましょう。これは、入力フィールドに書いたテキストをnameに含むレコードをすべて検索するサンプルです。例えば、「yamada」と書いて送信すると、名前に「yamada」を含むものがすべて検索されます。

ここでは、「名前(name)の中に、フォームで送信した値($find)が含まれているもの」を検索しています。whereの部分を見てみると、
where(["name like " => '%' . $find . '%'])
こんな具合になっているのがわかりますね。この条件文を整理すると、ここで指定されている式はこうなります。
name like '%○○%'
この○○の部分は、$findの値が嵌めこまれます。これは「LIKE検索(あいまい検索)」と呼ばれるもので、テキストを含むものを検索するのに用いられます。%記号はワイルドカード(どんな文字でも当てはまる)として働きます。もし、「○○で始まるもの」を取り出したければ、'○○%'とすればいいし、逆に「○○で終わるもの」なら、'%○○'と書けばいいわけですね。

このあたりは、SQLというデータベース言語の条件設定とほぼ同じになっています。SQLがわかる人なら、ここでの説明を読んで「なるほど……」とすぐに納得できたことでしょう。よくわからなかった人は、SQLについて別途調べてみると良いでしょう。

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

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

●プログラム・リスト●

public function find() {
    $persons = [];
    if ($this->request->is('post')) {
        $find = $this->request->data['find'];
        $persons = $this->Persons->find()
            ->where(["name like " => '%' . $find . '%']);
    }    $this->set('msg', null);
    $this->set('persons', $persons);
}
※関連コンテンツ

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