CakePHPは非常に便利ですが、データの取得方法に迷うことがあります。
今回は、リレーションしているテーブルの情報をもとにデータを取得する方法を紹介します。
Containしているデータの情報を使って検索
$editorsTable = TableRegistry::getTableLocator()->get('Editors');
$editorsTable
->find()
->contain(['Articles'])
->matching('Articles', function($q){
return $q->where(['Articles.Category_id'=>1]);
}
)
->order(['Articles.PublishDate' => 'DESC'])
->first();
検索条件に変数を使いたい場合
直前の例では検索に利用する値が数値(1)でしたが、$numberのように変数を利用したい場合もあります。
その場合は下記のように取得できます。
->matching('Articles', function($q) use ($number){
return $q->where(['Articles.Category_id'=>$number]);
}
)
AND検索、OR検索
AND検索
->maching()の部分を繰り返せばAND検索になります。
下記の例ではカテゴリーIDが1、かつタグIDが1
->matching('Articles', function($q){
return $q->where(['Articles.Category_id'=>1]);
}
)
->matching('Articles', function($q){
return $q->where(['Articles.Tag_id'=>1]);
}
)
OR検索の場合
下記のようにします。
->matching('Articles', function($q){
return $q->where([
OR' => [
['Articles.Category_id'=>1],
['Articles.Tag_id'=>1],
],
]);
}
);
コメント