Abfrage-generator / DQL-funktioniert nicht mit INNER JOIN - Syntax Problem
Ich weiß, ich habe einen syntax isse hier, aber ich kann es herausfinden. Ich versuche eine SELECT-und INNER-JOIN 5 Tabellen, aber Symfony ist beschweren sich über die Entitäten, die im JOIN verwendet werden, bevor Sie definiert.
Eigentliche Fehler ist wie folgt: [Semantical Error] line 0, col 121 near 'I ON C.id = ': Error: Identification Variable MySiteBundle:Items used in join path expression but was not defined before.
Hier ist der PHP-code.
Hinweis: habe ich gekürzt, dass diese Abfrage zwei Spalten zwei Tabellen, und eine Verknüpfung zu halten, die Frage einfach und zeigen, was ich meine. Die eigentliche Abfrage viel mehr und produziert den gleichen Fehler.
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery(
'select C.name as CName, I.id as IId
FROM MySiteBundle:Categories C
INNER JOIN MySiteBundle:Items I ON C.id = I.category_id');
$result = $query->getResult();
Update
Wie vorgeschlagen habe ich getan, Weg mit der DQL-code und bin mithilfe von Query Builder-code. Ich bin immer eine sehr ähnliche Fehlermeldung, die sagt 'Categories c': Error: Class 'Categories' is not defined
. Meine QB-code ist unten.
$em = $this->getDoctrine()->getEntityManager();
$qb = $em->createQueryBuilder()
->select('c.name, i.id, i.image, i.name, i.description, m.id, m.quantity, m.value, m.qty_received, m.custom_image, m.custom_name, m.custom_description, u.user1fname, u.user1lname, u.user2fname, u.user2lname')
->from('Categories', 'c')
->innerJoin('Items', 'i', 'ON', 'c.id = i.category_id')
->innerJoin('MemberItems', 'm', 'ON', 'i.id = m.item_id')
->innerJoin('User', 'u', 'ON', 'm.memberinfo_id = u.id')
->where('u.id = ?', $slug)
->orderBy('c.id', 'ASC')
->getQuery();
$memberItems = $qb->getResult();
Irgendwelche Vorschläge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Louis gepostet während ich getippt. Naja.
DQL kümmert sich um die join-details für Sie auf der Grundlage Ihrer Verbände. Im Allgemeinen, brauchen Sie nur auf Zauber aus der Klasse name. So etwas wie:
Und endgültig den Abfrage-generator verwenden.
=============================================================================
Hier ist ein Beispiel für die Verwendung von query builder in Symfony 2.
'Categories' is not defined.
ich gebucht habe, die volle WB-Abfrage in meiner ursprünglichen Frage oben.DQL-keine joins verwenden wie das. Sie sind ein bisschen vereinfacht. Allerdings habe ich auch festgestellt, dass Sie underdocumented.
Den tatsächlichen Zusammenhang benutzt wird, hängt von Ihrem Modell.
Ich normalerweise verwenden Sie den Abfrage-generator.
Können Sie haben zu prüfen, Ihre Anmerkungen oder yml-Datei, um sicherzustellen, dass Sie Ihre mapping-setup korrekt für OneToMany, ManyToMany, und ManyToOne.
In Ihrem MemberItems Controller oder MemberItems Repository setzen diese: