Mysql
 sql >> Datenbank >  >> RDS >> Mysql

viele-zu-viele-Beziehungen in der Lehre

Dies ist nicht möglich, da Sie keine ordnungsgemäße Verknüpfung vornehmen können. Der Join hängt in diesem Fall vom Wert in parent_entity und child_entity ab (dh jede Zeile muss möglicherweise mit einer anderen Tabelle verknüpft werden). Außerdem, wie wird die Doktrin wissen, welcher Datensatztyp zu hydrieren ist (dh weil er vom Entitätstyp abhängt).

Möglicherweise können Sie so etwas erreichen (auch wenn es seltsam sein wird), indem Sie die WITH-Klausel für Ihre Joins verwenden. In der Methode setUp() Ihres Nachrichtenmodells könnten Sie beispielsweise Folgendes tun:

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

Und im Setup Ihres Links-Modells:

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

Sie müssten alle Kombinationen von Joins im Links-Modell definieren. Was ich meine ist, dass Sie ihm sagen müssten, dass es viele Neuigkeiten und Alben hat, indem Sie sowohl die child_id als auch die parent_id verwenden.

Und dann müssten Sie in Ihrer Abfrage so etwas tun:

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

Wie Sie sehen können, ist dies sehr umständlich. Ich würde dringend empfehlen, Join-Tabellen für jede Beziehung zu erstellen. Sie würden immer noch bekommen, wonach Sie suchen, indem Sie an jedem Join-Tisch teilnehmen.