Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

relacionamento muitos-para-muitos na doutrina


Isso não é possível porque você não pode fazer uma junção adequada. A junção neste caso dependerá do valor em parent_entity e child_entity (ou seja, cada linha pode precisar ser unida a uma tabela diferente). Além disso, como a doutrina saberá qual tipo de registro hidratar (ou seja, porque é dependente do tipo de entidade).

Você pode conseguir algo assim (embora seja estranho) usando a cláusula WITH em suas junções. Por exemplo, no método setUp() do seu modelo de notícias você poderia fazer:
$this->hasMany('Links as NewsVideoLinks', array('local' => 'id', 'foreign' => 'parent_id'));

E na configuração do seu modelo de Links:
$this->hasMany('Videos as videos', array('local' => 'child_id', 'foreign' => 'id'));

Você precisaria definir todas as combinações de junções no modelo Links. O que quero dizer é que você precisaria dizer que ele tem muitas notícias e álbuns usando tanto o child_id quanto o parent_id.

E então na sua consulta, você precisaria fazer 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 você pode ver, isso é muito complicado. Eu recomendo criar tabelas de junção para cada relação. Você ainda obteria o que está procurando juntando-se a cada tabela de junção.