skillup

技術ブログ

PHP

cakeでの多対多を含んだ検索に関して

投稿日:

cakeを使って多対多を実現する方法はこのエントリーで紹介しました。

が、多対多を含む検索をする場合は一筋縄ではいかず結構面倒くさいです。

通常cakeで検索を行う場合、

‘conditions’ =>[‘Item.id’ => 5]

などと書いてあげればOKです。

ただcakeでの多対多の場合、これが通用しません。

例えば下記のようなケースでテーブルが紐づいているとします。

 

relation

上記のケースである特定のtagを含んだitemを

‘conditions’ =>[‘Tag.id’ => 5]

のようにして取り出すことはできません。もちろんTagにnameなどの属性があって検索しようと思っても同様に駄目です。

cakeは多対多のテーブルを直接つなげてみているわけではないようです。

で、その場合、どうするかというとまず関連テーブルをみて、Tag.id=5となっているItem.idを検索し、whereinの要領で、検索を行います。

具体的には下記のようなソースになります。

ソース

参考リンク

http://neoinspire.net/archives/62#.Vsr8E_mLTGx

-PHP
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Traitによるコードの再利用

PHPでは多重継承が禁じられて(親は1つしかもてない)いるため、共通性のあるコードを書こうと思った時に親にかいていない場合限界があります。 そんな時に使えるのがTraitという考え方で、これを使います …

no image

PHPでのコンソール入力に関して

PHPはほとんどの場合、ブラウザでURLをたたいてWEBサーバーから呼び出されるパターンがほとんどです。 ところが、コンソールから使いたい場合などもあるでしょう。 コンソールから入力する場合、なんらか …

no image

クラスメソッドとインスタンスメソッド

以前staticメソッドを定義したときに、記法がインスタンスメソッドの呼び方でも呼べてしまうことがあったので、これを機にインスタンス・クラス×変数・メソッドちょっと調べてみました。 言葉で書くよりコー …

no image

composer最低保証のバージョンを管理

自分の開発端末ではPHPのバージョンが7.1何ですが、上げなければいけないサーバーのバージョンが7.0だったりして、

みたいなエラーが …

no image

cakePHPでのCSVダウンロード

cakePHPにてCSVのダウンロードなんぞを。 以前このエントリーでCSVダウンロードに関しては取り扱ったのですが、 ボタンを押す ファイルダイアログが開く パスを選ぶ 意図したデータを正常にダウン …