2012-02-16 17 views
5

nel mio database Ho 5 tabelle:Yii relazioni multiple

  • gioco (game_id, nome, ...)
  • tag (tag_id, nome, ...)
  • di raccolta (coll_id, nome, ...)
  • collections_tags (id, coll_id, tag_id)
  • game_tag (id, game_id, tag_id)

Ogni gioco ha molti i tag, la raccolta ha molti tag. Se prendo una collezione, posso trovare i suoi giochi usando i tag della collezione.

Sto cercando di eseguire questa operazione con le relazioni 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') 

tanto sono un $ raccolta e provare questo:

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

e ottenere un errore
Cosa c'è di sbagliato in le relazioni?

risposta

6

Come si può vedere qui: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through, la corretta dichiarazione di quel rapporto sarebbe la seguente:

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

Nell'esempio che mi hai dato (a yiiframework.com) che usano il modello "Ruolo". È necessario utilizzare il modello collections_tags nel mio caso? O c'è qualche soluzione alternativa senza crearne una nuova classe? – lvil

+0

Potrebbe non essere necessario, ma se c'è un modo, sarebbe piuttosto difficile e dovresti scavare nel codice AR del framework. È possibile trovare il seguente "principio" nella documentazione: "Prima di utilizzare AR per eseguire query relazionali, dobbiamo far sapere a AR come una classe AR è correlata con un'altra". Quindi AR funziona con i modelli. Ecco com'è. –