Ich bin ziemlich neu in Doctrine2 und ich versuche es einfach zu lernen, indem ich es benutze.Unerwünschte Join-Bedingung mit Doctrine2
Ich habe zwei Tabellen, Gruppe und Benutzer. Die Gruppe kann einen Vorsitzenden, stellvertretende Vorsitzende und Mitglieder haben. Mein Problem tritt auf, wenn ich versuche, eine Liste von Gruppen mit Benutzer als Vorsitzender oder stellvertretender Vorsitzender zu erhalten. Dies ist meine Anmerkung zum Vice-Chairman in der Konzerneinheit.
/**
* @var string
*
* @ORM\ManyToMany(targetEntity="User")
* @ORM\JoinTable(name="vicechairmen",
* joinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
*)
*/
private $vicechairmen;
Abfrage-Generator
$qry = $this->entManager->getRepository("Entities\Local\Group")->createQueryBuilder("g");
$qry->leftJoin("g.vicechairmen", "gv", "WITH", "gv.id = g.id");
$qry->where($qry->expr()->eq('g.chairman', $id))->orWhere($qry->expr()->eq('gv.id', $id));
(irgendwie) Erwartete SQL-Abfrage
SELECT g.id FROM `group` g
LEFT JOIN vicechairmen vg ON g.id = vg.group_id
LEFT JOIN user u ON u.id = vg.user_id
WHERE g.chairman_id = 4 OR u.id = 4
aber ich bekomme (select verkürzt und umbenannt Aliase) würde
SELECT g.id FROM `group` g
LEFT JOIN vicechairmen vg ON g.id = vg.group_id
LEFT JOIN user u ON u.id = vg.user_id AND u.id = g.id
WHERE g.chairman_id = 4 OR u.id = 4
die Frage Deshalb ist die Lehre tr Ying, um Benutzer und Gruppe mit ihren IDs zu verbinden? Und wie man es verbietet?