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

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

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

■クエリーを直接実行してみる

では、findメソッドを修正しましょう。下のリスト欄のように書き換えて下さい。

これは、入力フィールドにクエリーの条件となる部分(where以降の部分)を書いて送信すると、それを直接実行して結果を表示する、というものです。例えば、
age > 20 and age < 40

こんな具合に書いて送信すると、ageの値が20より大きく、40より小さいものだけを検索します。これを実行すると、データベースに、
select * from persons where age > 20 and age < 40

このようなクエリーが送信され、結果が得られる、というわけです。では、実行している処理部分を見てみましょう。

●use文について
まず、内容に入る前に、use文について触れておきましょう。今回は、以下のuse文を追記しておく必要があります。
use Cake\Datasource\ConnectionManager;
ConnectionManagerは、Cake\Datasource名前空間に配置されていますので、このuse文を追記しないとクラス名だけで利用することができません。忘れないように!

●Connectionを得る
$connection = ConnectionManager::get('default');
まず最初に、ConnectionManagerConnectionインスタンスを取得します。これは先程の説明のとおりですね。

●SQLのクエリー文を作成する
$query = 'select * from persons where ' . $find;
続いて、実行するクエリーのテキストを用意しておきます。「select * from persons where」の後に、送信されてきたテキストをつなげています。

●queryし、fetchAllする
$persons = $connection->query($query)->fetchAll();
メソッドチェーンを使っています。Connectionからqueryを呼び出し、更にfetchAllで全エンティティを取得しています。これで、検索されたレコードが配列の形で取り出されました。後は、これをテンプレート側に渡して処理していくだけです。

基本的な流れがわかれば、クエリーを直接実行するのもそう難しくはありません。ただ、「得られるデータの型式が異なる」という点だけは忘れないようにしましょう。

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

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

●プログラム・リスト●

// use Cake\Datasource\ConnectionManager; // このuseを追加

public function find() {
    $this->set('msg', null);
    $persons = [];
    if ($this->request->is('post')) {
        $find = $this->request->data['find'];
        $connection = ConnectionManager::get('default');
        $query = 'select * from persons where ' . $find;
        $persons = $connection->query($query)->fetchAll();
    }
    $this->set('persons', $persons);
}

※関連コンテンツ

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