私はcakephp.orgのドキュメントを読んで時間を費やし、様々な実用的な例を試してみました。右。次のように私は3つのテーブルです持っているもの:CakePHP: 'find'条件で2番目の深いモデルの関連付けを使用して、重複した結果を返す
- プロジェクト
- project_tags
- タグ
誰かが新しいプロジェクトを追加するとき、彼らは事前に定義されたリストから選択され、そのタグを選択しますタグテーブル。入力したこのタグは、project_idおよびtag_idフィールドを使用してproject_tagsに格納されます。私は正しい関係はまだ私には自明であるか否かが
- プロジェクトhasManyのprojectTag
- projectTag belongsToのプロジェクト
- ProjectTag belongsToのタグ
:
モデルとの関係以下の通りです。私はここで数多くの可能性を試しました。
私がやっていることは、特定のタグのすべてのプロジェクトで検索を実行することです。私は、次の手順を実行して、これを行っています
$this->Project->contain(array('ProjectTag' => 'Tag', 'User' => array('id')));
$projects = $this->Project->find('all', array('conditions' => array('ProjectTag.tag_id' => '6')));
結果は、列ProjectTag.tag_idが存在しないことをSQLエラーです。これは協会に誤りがあることを私に伝えますが、どこで?
これは、Containableを使用しているときに私の好みの状態で2番目の深い関連hasManyモデルを使用できないためですか?もしそうなら、私はこれをどのように修正できますか?
私はそれが長いことを知っています、ごめんなさい。この奇妙な状況に誰かが光を当てることはできますか?
もう1つのアプローチは、プロジェクトのunbindModel()を使用してすべてのバインディングをProjectTagに削除し、次にbindModel()とProjectTag.project_id = Project.idの条件を使用してhasOneを追加しましたが、同じプロジェクトが返され、それぞれのProjectTagに1つずつ表示されますが、正しく表示されません。
私は包含可能な動作を使用しており、AppModelにrecursive = -1を設定しています。
ご協力いただきまして誠にありがとうございます。 ありがとう
"簡単な"と言うと、私はあなたが本当に意味することは "些細ではない"と思います。 – eaj
@eaj - まったく正しい;)updated – SimonDowdles