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

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

作成:2015-09-26 10:28
更新:2015-09-26 10:28

■ダイナミックファインダー

複雑な条件の検索だけでなく、アプリケーションでは「シンプルな検索」も多用されます。特定のフィールドから指定した値のものを探す、というような検索ですね。IDの番号を指定してエンティティを取り出すのは、前に「get」としてやりました。では、それ以外のフィールドから検索するためのものはないのでしょうか?

実は、あります。それは「ダイナミックファインダー(Dynamic Finder)」と呼ばれるものです。これは、モデルを作成すると自動的に生成される、各フィールドからの値の検索に特化されたメソッドです。モデルを作成すると、
findBy○○
このような名前のメソッドがモデルに自動生成されます(○○の部分にはテーブルのフィールド名が入ります)。例えば、personsテーブルでは、id, name, age, mailといったフィールドが用意されていますから、
findById
findByName
findByAge
findByMail
このようなメソッドが自動的に作成されている、というわけです。引数に検索する値を渡して呼び出せば、その値のエンティティが全て取り出せてしまいます。

下に簡単なサンプルを上げておきましょう。findメソッドを以下のように書き換えてみてください。入力フィールドにテキストを書いて送信すると、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->findByName($find);
    }
    $this->set('persons', $persons);
}

※関連コンテンツ

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