Derzeit funktioniert diese Funktion: Es zeigt für ein bestimmtes Spiel an, wie viele Jobs es gibt.SQL/Doctrine: Links Join Problem
Das Problem: Wenn es keinen Job gibt, erscheint das Spiel nicht auf der Liste.
Wie wird das Spiel angezeigt, auch wenn kein Job angefügt ist?
Dank
public function getWithGames()
{
$q = $this->createQuery('c')
->leftJoin('c.stJob j')
->where('j.expires_at > ?', date('Y-m-d h:i:s', time()))
->addOrderBy('c.name');
$q->andWhere('j.is_activated = ?', 1);
$q->andWhere('j.is_public = ?', 1);
return $q->execute();
}
ich denke, das ist wirklich egal, da es eine linke Verbindung ist. also egal, wo die Bedingung angewendet wird. aber schau, was er als das Problem definiert. Wenn es keinen Job gibt, ist es nicht aufgeführt. also möchte er einen Join-Wert, wo (die Job-Attribute public und aktiviert sind 1) OR (beide sind NULL) ... (was passiert, wenn es keinen Job gibt). Der letzte Teil ist, was er vergaß –
Es ist immens wichtig. Ein 'OR ... Zeug ist NULL 'ist überhaupt nicht wünschenswert. Der eigentliche Zweck der ON-Klausel besteht darin, dass dies die Bedingungen sind, die zur Herstellung der Verbindung *** verwendet werden. Wenn keine Zeilen diesen Bedingungen entsprechen, gibt es keinen Join - und im Falle eines LINKEN JOIN ist das in Ordnung. Der Versuch, eine ON-Klausel mit manuell geschriebenen Stuff-NULL-Bedingungen nachzuahmen, ist hässlich. Ich hoffe, das ist nicht der Grund für einen Downvote hier. – VoteyDisciple
das ist völlig richtig. Ich habe dir eine positive Bewertung gegeben :) Was ich nicht mochte war, dass es nicht das Problem in seinem Code ist. Das Problem in seinem Code war ein rein semantisches Problem, nicht zu verstehen, was ein linker Join tatsächlich tut. –