sql >> Databáze >  >> RDS >> Mysql

vztah mnoho k mnoha v doktríně

To není možné, protože nemůžete provést správné připojení. Spojení v tomto případě bude záviset na hodnotě v parent_entity a child_entity (tj. každý řádek může vyžadovat připojení k jiné tabulce). Kromě toho, jak bude doktrína vědět, který typ záznamu má hydratovat (tj. protože je závislý na typu entity).

Možná se vám podaří něco takového odstranit (i když to bude divné) pomocí klauzule WITH ve vašich spojeních. Například v metodě setUp() vašeho zpravodajského modelu můžete provést:

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

A v nastavení vašeho modelu Links:

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

Budete muset definovat všechny kombinace spojení v modelu Links. Chci říct, že byste mu měli říct, že obsahuje mnoho novinek a alb, a to pomocí Child_id i parent_id.

A pak byste ve svém dotazu museli udělat něco jako:

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

Jak vidíte, je to velmi těžkopádné. Vřele doporučuji vytvořit spojovací tabulky pro každý vztah. Stále byste získali to, co hledáte, pokud byste se připojili ke každému spojovacímu stolu.



  1. Migrace databáze MySQL 8.0.20 na AWS Aurora

  2. Vypočítejte rozdíl mezi dvěma daty v hodinách a minutách

  3. sladění časového pásma s SQL

  4. MySQL Server zmizel při importu velkého souboru SQL