2012-02-16 16 views
5

私は5つのテーブルがあります。Yiiの複数の関係

  • ゲーム(game_id、名前、...)
  • タグ(TAG_ID、名前、...)
  • コレクション(coll_idを、名、...)
  • collections_tags(ID、coll_id、TAG_ID)
  • game_tag(ID、game_id、TAG_ID)

すべてのゲームは、多くを持っていますタグ、コレクションには多くのタグがあります。コレクションを取ると、コレクションのタグを使ってゲームを見つけることができます。

私はYiiの関係でこのタスクを実行しようとしている:

//in Collection's relations: 
'tags'=>array(self::MANY_MANY, 'Tag', 'collections_tags(coll_id,tag_id)'), 
'games'=>array(self::HAS_MANY, 'Game','tag_id', 'through'=>'tags') 

それから私は$コレクションを取得し、この試してみてください。

echo "collection ".$collection->name.": (id=".$collection->coll_id.") has ".count($collection->tags)."tags\n"; 
echo count($coll->games);//error here 

を、エラーで間違っている何
を取得関係は?

答えて

6

あなたがここで見ることのよう:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through次のように、その関係の正しい宣言は次のようになります。

'games'=>array(self::HAS_MANY, 'Game', array('tag_id'=>'id'), 'through'=>'tags') 
+0

をあなたが(yiiframework.comで)私を与えた例では、彼らは「役割」モデルを使用します。私の場合、collections_tagsモデルを使用する必要がありますか?または、新しいクラスを作成せずにいくつかの回避策がありますか? – lvil

+0

これは必要ではないかもしれませんが、方法がある場合はかなり難しく、フレームワークのARコードを掘り下げる必要があります。 「ARを使用してリレーショナル・クエリーを実行する前に、ARクラスが他のARクラスとどのように関連しているかをARに知らせる必要があります。だから、ARはモデルで動作します。そうだよ。 –