sql >> Database teknologi >  >> RDS >> Mysql

mange-til-mange forhold i doktrinen

Dette er ikke muligt, fordi du ikke kan lave en ordentlig join. Sammenkædningen i dette tilfælde vil afhænge af værdien i parent_entity og child_entity (dvs. hver række skal muligvis joine en anden tabel). Hertil kommer, hvordan vil doktrinen vide, hvilken registreringstype der skal hydreres (dvs. fordi den er afhængig af entitetstypen).

Du kan muligvis få noget som dette ud af (omend det vil være mærkeligt) ved at bruge WITH-klausulen på dine joins. For eksempel, i setUp()-metoden for din nyhedsmodel kan du gøre:

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

Og i opsætningen af ​​din Links-model:

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

Du skal definere alle kombinationer af joinforbindelser i Links-modellen. Det, jeg mener, er, at du skal fortælle den, at den også har mange nyheder og album ved at bruge både child_id og parent_id.

Og så i din forespørgsel skal du gøre noget 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 er dette meget besværligt. Jeg vil varmt anbefale at oprette jointabeller for hver relation. Du vil stadig få det, du leder efter, ved at deltage i hvert enkelt mødebord.



  1. MySQL REGEXP ordgrænser [[:<:]] [[:>:]] og dobbelte anførselstegn

  2. Visning af diagramdata fra en database

  3. Konfiguration af ScaleGrid-tilladelser på AWS ved hjælp af en IAM-politikskabelon

  4. java - passerer array i oracle-lagret procedure