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

dateTimeの使い方

phpの日付ライブラリであるdateTimeについて。 Contents1 過去のリンク2 頻出表現3 リンク 過去のリンク CakePHP3 日付ライブラリ(Time)について http://ski …

no image

composerでのライブラリ登録

今回はPHPのパッケージ管理ツールであるcomposerへのライブラリ登録を。 Contents1 ライブラリの作成2 packagistへの登録3 呼び出す側3.1 composer.json3.2 …

no image

php-fpmに関して

今回はphp-fpmに関して。会社のサーバー(このブログが載っているサーバー)がこれ使ってて、メモリをやたら消費しており、設定を見直す必要があったので、リサーチ。 Contents1 php-fpmと …

no image

PHPで配列の同一性(集合のチェック)

AとBという配列があり、A⊂B つまりは集合のような関係を確かめたいときに下記のようなメソッドを使います。  

no image

cakePHP3インストール

PHP7に上がりましたが、それ以前にcakeがversion3になっていますね。 いずれはこれでリプレイスをしなくてはいけないので、今日とりあえずインストールしてみました。 原則としてcomposer …