-
ID:dwromY さんの質問

CakePHP2.5にて、複数のモデルに検索をかけたいと思っています。
A→B→Cで結合しているモデルから、それぞれ任意のフィールドをLIKEで検索したいのですが、いい方法が見つかりません。

例えばContainableビヘイビアで、B・Cについての’conditions’=>array(’OR’)をAコントローラに記述すると、Column not found: 1054 Unknown column のエラーが出てしまいます。
Searchプラグインでも同様のエラーが出ます。
どなたか良い方法をご存知でしたらお教えください。

みんなの回答 5 件

ID:dwromY さんの回答

記載が漏れていました。
アソシエーションはA→BがhasMany、B→CがbelongsToです。

ID:.LEHcs さんの回答

質問内容がよくわからん

ID:.LEHcs

よくわからないけど、それぞれのモデルを管理するクラスは存在しないの?存在してれば、そいつに検索メソッド実行させてうまいこと出来るのでは?

ID:Rc3yXc

それぞれのモデルで設定できるよね。
ちょっとググったら出てくるはずなんだけど。

ID:srqFqs さんの回答

エラー内容から、単純に記述方法を間違ってると思われる。ちゃんと調べろ。ちなみにフィールド名は A.field みたいにテーブル名も含めといた方が無難。CakePHPのマニュアルはあんまりちゃんとしてないので、あちこちにあるTipsブログを探した方が解りやすい。

ID:dwromY

ありがとうございます。マニュアルも関連サイトもかなり参照したのですが、解決に至る情報が見つけられませんでした…。
フィールド名はテーブル名を含めて記述していますが、駄目なようです。

A→BのアソシエーションがbelongsToの場合は、エラーもなくデータが取得できるのですが、A→BがhasManyの場合、当該のエラーが出てしまいます。

ID:srqFqs

おかしかないか? A→B belongsTo は B が親、A→B hasMany なら A が親って事になる。前者は A に B_id、後者は B に A_id が必要になる。似てるようで全然違うぞ。

ID:dwromY

すいません、例え方が悪かったです。AとbelongsToの関係にある別のモデルで試すと、エラーなく処理が完了する事を伝えたかったのです。実際のテーブル構造では、BがA_idを所有しており、hasManyでアソシエーションしています。

ID:srqFqs さんの回答

あ、質問読み返したが、AのモデルからCのフィールドは参照できないぞ。孫になるから。だから C.field を条件にしたらエラーになる。recursiveを設定したらできるんかな…。

make a record of…: [CakePHP] 子・孫まで。複数の入れ子になったモデルを連結して取得したい

http://satussy.blogspot.jp/2011/11/cakephp_30.html
ID:BqCgpl さんの回答

findでjoin使えば?

最終更新日:2014-09-07 (4,157 views)

関連するトピックス

ページ上部に戻る