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],
                ],
            ]);
       }
 );

 
  
  
  
  

コメント