新しいを創造する知恵
2017.03.20

【CAKEPHP】ケース別、検索用サンプルコードまとめ

CAKEPHPでデータを検索する時、条件や順序、結合など様々なケースが考えられます。今回はそんな検索のためのコードをケース毎にまとめてご紹介いたします。


環境

今回はCAKEPHP3系で行います。

 

準備

はじめに、サンプルで3つのテーブルを用意します。

postsテーブル:id、name、status、type、seq、created、modified

categoriesテーブル:id、seq、created、modified

categories_postsテーブル:category_id、post_id

 

ケース別サンプルコード

postに条件を課して一覧を取得する

ページングなしの場合

この場合、find()を使用した一般的なコードは次のようになるでしょう。

contain()でcategoriesテーブルを結合して、さらにその中で条件や順序を指定しています。where()では複数の条件を指定しています。並列の条件はANDで繋がり、ORの中の条件はORで繋がります。また、LIKE検索する場合はキーワードの前後に%をつけます。order()で順序を指定しています。

この時に実行されるSQLは次のようになります。

 

ページングありの場合

この場合、paginate()を使用した一般的なコードは次のようになるでしょう。

基本的な構造はページングなしの場合と同じです。

この時に実行されるSQLは次のようになります。

ページングありの場合、postsテーブルの取得にLIMITがついています。この数はlimitを指定してあげることで変更が可能です。

 

特定のcategoryに属するpostを取得する

ページングなしの場合

この場合、find()を使用した一般的なコードは次のようになるでしょう。

leftJoin()でcategoriesテーブルをLEFT JOINしてwhere()でpostが属するcategoryを指定しています。

この時に実行されるSQLは次のようになります。

 

ページングありの場合

この場合、paginate()を使用した一般的なコードは次のようになるでしょう。

基本的な構造はページングなしの場合と同じです。

この時に実行されるSQLは次のようになります。

 

結び

私がCAKEPHPを使用しているときよくあるのは、公式のドキュメントでなかなか見つけられないメソッドがあったりして、いろいろとググって発見することです。今回はこれまでいろいろと調べてわかった検索の方法をまとめて掲載しました。

実際の開発ではもっと多くのテーブルが結合したり、条件が複雑だったりすることもありますが、基本的には今回掲載したものを組み合わせて大部分は対応可能かなと思います。