sql >> Base de Datos >  >> RDS >> Mysql

relación de muchos a muchos en la doctrina

Esto no es posible porque no puede hacer una unión adecuada. La unión en este caso dependerá del valor en parent_entity y child_entity (es decir, es posible que cada fila deba unirse a una tabla diferente). Además, ¿cómo sabrá la doctrina qué tipo de registro hidratar (es decir, porque depende del tipo de entidad)?

Es posible que pueda lograr algo como esto (aunque será extraño) usando la cláusula CON en sus uniones. Por ejemplo, en el método setUp() de su modelo de noticias podría hacer:

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

Y en la configuración de su modelo de Enlaces:

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

Deberá definir todas las combinaciones de uniones en el modelo Vínculos. Lo que quiero decir es que tendrías que decirle que tiene muchas noticias y álbumes usando tanto child_id como parent_id.

Y luego, en su consulta, tendría que hacer algo como:

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

Como puede ver, esto es muy engorroso. Recomiendo encarecidamente crear tablas de combinación para cada relación. Igual obtendrías lo que buscas uniéndote a cada mesa de unión.