sql >> Database >  >> RDS >> Mysql

veel-op-veel relatie in de leer

Dit is niet mogelijk omdat je geen goede join kunt doen. De join is in dit geval afhankelijk van de waarde in parent_entity en child_entity (d.w.z. elke rij moet mogelijk lid worden van een andere tabel). Bovendien, hoe zal de doctrine weten welk recordtype moet worden gehydrateerd (dat wil zeggen omdat het afhankelijk is van het entiteitstype).

Je kunt misschien iets als dit voor elkaar krijgen (hoewel het raar zal zijn) door de WITH-clausule op je joins te gebruiken. In de methode setUp() van uw nieuwsmodel zou u bijvoorbeeld het volgende kunnen doen:

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

En in de setup van uw Links-model:

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

U zou alle combinaties van joins in het Links-model moeten definiëren. Wat ik bedoel is dat je het moet vertellen dat het ook veel nieuws en albums heeft met zowel de child_id als de parent_id.

En dan zou je in je zoekopdracht iets moeten doen als:

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

Zoals je kunt zien is dit erg omslachtig. Ik zou ten zeerste aanbevelen om voor elke relatie samenvoegtabellen te maken. Je zou nog steeds krijgen wat je zoekt door je aan te sluiten bij elke join-tafel.



  1. Werken met MySQL-database-engines

  2. MySQL CURRENT_TIMESTAMP bij aanmaken en bijwerken

  3. Converteer één rij naar meerdere rijen met minder kolommen

  4. Docker met mysql:de fout betekent dat mysqld geen toegangsrechten heeft voor de map