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

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

作成:2015-10-03 08:54
更新:2015-10-03 09:18

■最初と最後、検索数

今回も、引き続き前回作成したfindアクションを使って、データ検索について掘り下げていくことにしましょう。まずは、エンティティの最初・最後を取り出す処理、そしてエンティティ数を得るメソッドについてです。


●最初のエンティティだけを取り出す
《Query》->first();
検索された中から最初のエンティティだけを取り出します。通常の検索ではエンティティの配列が偉ますが、このメソッドは1つのエンティティだけなので配列にはなりません。得られたエンティティがそのまま渡されます。

●検索された数を調べる
《Query》->count();
検索されたエンティティの数を調べて返すものです。返値は整数値になります。

では、これらの利用例を挙げておきましょう(下のリスト)。これは、検索を実行すると、その最初と最後のエンティティのnameと検索されたエンティティ数をメッセージとして表示するサンプルです。「あれ? 最初のエンティティはfirstだけど、最後はやってないぞ?」と思った人。countでエンティティ数がわかれば、offsetで最後のものだけを取り出すのは簡単にできますね?

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

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

●プログラム・リスト●

public function find() {
    $this->set('msg', null);
    $persons = [];
    if ($this->request->is('post')) {
        $find = $this->request->data['find'];
        $first = $this->Persons->find()
            ->where(["name like " => '%' . $find . '%'])
            ->first();
        $count = $last = $this->Persons->find()
            ->where(["name like " => '%' . $find . '%'])
            ->count();
        $last = $this->Persons->find()
            ->offset($count - 1)
            ->where(["name like " => '%' . $find . '%'])
            ->first();
        $persons = $this->Persons->find()
            ->where(["name like " => '%' . $find . '%']);
        $msg = 'FIRST: "' . $first->name . '", LAST: "' . $last->name . '". (' . $count . ')';
        $this->set('msg', $msg);
    }
    $this->set('persons', $persons);
}

※関連コンテンツ

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