データ検索をマスターする! (6/6)
作成:2015-10-03 09:18
更新:2015-10-03 09:18
更新:2015-10-03 09:18
■クエリーを直接実行してみる
では、findメソッドを修正しましょう。下のリスト欄のように書き換えて下さい。
これは、入力フィールドにクエリーの条件となる部分(where以降の部分)を書いて送信すると、それを直接実行して結果を表示する、というものです。例えば、
こんな具合に書いて送信すると、ageの値が20より大きく、40より小さいものだけを検索します。これを実行すると、データベースに、
このようなクエリーが送信され、結果が得られる、というわけです。では、実行している処理部分を見てみましょう。
●use文について
まず、内容に入る前に、use文について触れておきましょう。今回は、以下のuse文を追記しておく必要があります。
●Connectionを得る
●SQLのクエリー文を作成する
●queryし、fetchAllする
基本的な流れがわかれば、クエリーを直接実行するのもそう難しくはありません。ただ、「得られるデータの型式が異なる」という点だけは忘れないようにしましょう。
これは、入力フィールドにクエリーの条件となる部分(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');
まず最初に、ConnectionManagerでConnectionインスタンスを取得します。これは先程の説明のとおりですね。●SQLのクエリー文を作成する
$query = 'select * from persons where ' . $find;続いて、実行するクエリーのテキストを用意しておきます。「select * from persons where」の後に、送信されてきたテキストをつなげています。
●queryし、fetchAllする
$persons = $connection->query($query)->fetchAll();メソッドチェーンを使っています。Connectionからqueryを呼び出し、更にfetchAllで全エンティティを取得しています。これで、検索されたレコードが配列の形で取り出されました。後は、これをテンプレート側に渡して処理していくだけです。
基本的な流れがわかれば、クエリーを直接実行するのもそう難しくはありません。ただ、「得られるデータの型式が異なる」という点だけは忘れないようにしましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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 プログラミング入門」に戻る