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

 
 
//find()にQueryExpressionを使うサンプル
public function find() {

//絞り込んだ結果のエンティティ配列
$persons = [];

//リクエストの種別がPOSTであるなら
if ($this->request->is('post')) {
//添字の'find'とは、テンプレートの該当フォームのname属性に指定したもの
//テキストフォームの例: $this->Form->text( 'text1'←ここ )
//なお、data['find']やdata('find')はdeprecated
//getData('find')が現行バージョンでの推奨らしい
$find = $this->request->data['find'];
//最初にSELECT * FROM persons のクエリを作成する
//なお、条件を付加していく段階ではクエリは実行されない
//データが必要になった時、つまりテンプレートでのforeachで初めて実行される
//find('all')や、find()->all()などの場合はすぐに実行される
$query = $this->Persons->find();
//上のクエリに適合したクエリエクスプレッションを生成
$exp = $query->newExpr();
//絞込に使用するための無名関数を宣言
//第一引数にはクエリエクスプレッション、
//第二引数には、今回は名前が絞込の条件となるので、
//"まつもとゆきひろ, やくみつる"といったコンマ区切りの文字列を代入する
$fnc = function($exp, $f) {
return $exp
//名前がNULLでない
->isNotNull('name')
//メールアドレスがNULLでない
->isNotNull('mail')
//年齢が0より大きい
->gt('age',0)
//名前が第二引数で渡されたどれかに該当する
//なお、explode関数はコンマ区切りだった文字列を配列に変換している
->in('name', explode(',',$f));
};
//無名関数をwhere句に設定する
$persons = $query->where($fnc($exp,$find));
}
//クエリをテンプレートに渡すためにset()する
$this->set('persons', $persons);
$this->set('msg', null);
}