sql >> Databasteknik >  >> RDS >> Mysql

många-till-många-relation i doktrin

Detta är inte möjligt eftersom du inte kan göra en ordentlig join. Sammanfogningen i det här fallet beror på värdet i parent_entity och child_entity (dvs. varje rad kan behöva anslutas till en annan tabell). Dessutom, hur kommer doktrinen att veta vilken posttyp som ska hydratiseras (dvs. eftersom det är beroende av entitetstypen).

Du kanske kan få till något sådant här (även om det blir konstigt) genom att använda WITH-satsen på dina joins. Till exempel, i setUp()-metoden för din nyhetsmodell kan du göra:

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

Och i inställningen av din Links-modell:

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

Du skulle behöva definiera alla kombinationer av kopplingar i länkmodellen. Vad jag menar är att du måste berätta för den att den har många nyheter och album också med både child_id och parent_id.

Och sedan i din fråga skulle du behöva göra något som:

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

Som du kan se är detta mycket besvärligt. Jag skulle starkt rekommendera att skapa sammanfogningstabeller för varje relation. Du skulle fortfarande få det du letar efter genom att gå med i varje anslutningsbord.



  1. Den mest effektiva metoden för att förfalla poster efter 10 minuter från skapande

  2. LIKE-kommandot Mysql

  3. Hur frågar jag med fält i den nya PostgreSQL JSON-datatypen?

  4. mysql och php PDO - vad händer med en oengagerad transaktion om anslutningen stängs oväntat?