Mysql
 sql >> Database >  >> RDS >> Mysql

molti-a-molti in dottrina

Questo non è possibile perché non puoi fare un join corretto. Il join in questo caso dipenderà dal valore in parent_entity e child_entity (ad esempio, ogni riga potrebbe dover unire a una tabella diversa). Inoltre, come farà la dottrina a sapere quale tipo di record idratare (cioè perché dipende dal tipo di entità).

Potresti riuscire a realizzare qualcosa del genere (anche se sarà strano) usando la clausola WITH sui tuoi join. Ad esempio, nel metodo setUp() del tuo modello di notizie potresti fare:

$this->hasMany('Links as NewsVideoLinks', array('local' => 'id', 'foreign' => 'parent_id'));

E nella configurazione del tuo modello Links:

$this->hasMany('Videos as videos', array('local' => 'child_id', 'foreign' => 'id'));

Dovresti definire tutte le combinazioni di join nel modello Links. Quello che voglio dire è che dovresti dirgli che ha anche molte notizie e album usando sia child_id che parent_id.

E poi nella tua query, dovresti fare qualcosa del tipo:

$query = Doctrine_Query::create();
$query->from('News n');
$query->innerJoin("n.NewsVideoLinks as links WITH parent_entity = 'news'");
$query->innerJoin("links.Videos as vids WITH child_entity = 'videos'");
$results = $query->execute();

Come puoi vedere questo è molto ingombrante. Consiglio vivamente di creare tabelle di join per ogni relazione. Otterrai comunque ciò che stai cercando unendoti a ogni tabella di unione.