Mysql
 sql >> Base de données >  >> RDS >> Mysql

relation plusieurs à plusieurs dans la doctrine

Ce n'est pas possible car vous ne pouvez pas faire une jointure correcte. La jointure dans ce cas dépendra de la valeur dans parent_entity et child_entity (c'est-à-dire que chaque ligne peut devoir se joindre à une table différente). De plus, comment la doctrine saura-t-elle quel type d'enregistrement hydrater (c'est-à-dire parce qu'il dépend du type d'entité).

Vous pourrez peut-être retirer quelque chose comme ça (bien que ce soit bizarre) en utilisant la clause WITH sur vos jointures. Par exemple, dans la méthode setUp() de votre modèle d'actualités vous pourriez faire :

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

Et dans la configuration de votre modèle Links :

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

Vous devez définir toutes les combinaisons de jointures dans le modèle Links. Ce que je veux dire, c'est que vous devez lui dire qu'il contient également de nombreuses actualités et albums en utilisant à la fois child_id et parent_id.

Et puis dans votre requête, vous devrez faire quelque chose comme :

$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();

Comme vous pouvez le voir, c'est très encombrant. Je recommanderais fortement de créer des tables de jointure pour chaque relation. Vous obtiendrez toujours ce que vous recherchez en vous joignant à chaque table de jointure.