symfony2: wie man group_concat in QueryBuilder verwendet
Ich bin mit nested-set (Gedmo Baum) Entität namens "Location". Die Entität "Wohnung" hat location_id und was ich brauche, es zu tun, um map-scalar-Wert mit der Bezeichnung z.B. "Pfad", um die Abfrage gibt alle Wohnungen.
In Doctrine1, hatte ich diesen code:
/**
* Add "path" to each element
*
* @param Doctrine_Query $query
* @param string $separator
*/
protected function addScalar_path(Doctrine_Query $query, $separator=", ")
{
$subquery = "k99.root_id=o.root_id AND k99.lft<=o.lft AND k99.rgt>=o.rgt AND k99.level<=o.level" ;
$query->addSelect("(SELECT GROUP_CONCAT(k99.name ORDER BY k99.level SEPARATOR '$separator') FROM Location k99 WHERE $subquery) AS path") ;
}
Hinweis: "o" - alias für die primäre Abfrage.
Dieser code würde mir erlauben, zu verwenden
{foreach .... as $appartment}
{$appartment->path}
...
Welche drucken würde:
Australia, Victoria, Melbourne, ...other children...
Wie zu tun die gleiche Sache in D2? Und wie sogar die Doktrin Durchwahlnummern in meiner symfony2 Projekt?
InformationsquelleAutor der Frage Zeljko | 2012-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie es verwenden möchten, in QueryBuilder müssen Sie :
1.) DQL-Funktionen GroupConcat: GroupConcat
2 ) Für Die Anmeldung GroupConcat :DQL-benutzerdefinierte Funktionen
andere alternative ist die Verwendung NativeQuery :Native SQL
In symfony2 registrieren einer Funktion DQL-es ist sehr einfach, fügen Sie einfach GROUP_CONCAT in der config.yml wie:
Für weitere Informationen besuchen Sie Registrieren Sie Benutzerdefinierte DQL-Funktionen
InformationsquelleAutor der Antwort a.aitboudad
Wenn jeder kommt in diesem Beitrag gibt ' s jetzt ein Lehre Erweiterungen repository in Github. Die repo hat Anweisungen, wie es zu benutzen. Sie können Komponisten, um es zu installieren und verwenden Sie dann die Funktion, die Sie interessiert.
EDIT:
Zum Wohle des Benutzers, Tushar, die Art und Weise zu verwenden, GROUP_CONCAT in Doctrine2 ist DQL ist einfach zu installieren Lehre Erweiterungen:
Um es zu aktivieren: fügen Sie Folgendes in deine config.yml:
Dann in Ihrem code, Sie sollten jetzt in der Lage zu verwenden, Group Concat in Ihrem DQLs:
Oder in dem Fall für die ursprüngliche Frage:
InformationsquelleAutor der Antwort user1370897
Nur eine Ergänzung zu @ein.aitboudad Antwort:
Die DQL-Funktion GroupConcat verbunden zu haben scheint, eine «eingeschränkte Unterstützung für GROUP_CONCAT».
Hier ist die vollständige Unterstützung version :
Die Konfiguration ist so, wie er erwähnt.
InformationsquelleAutor der Antwort Olivier
Hatte ich ähnliches problem. GROUP_CONCAT nicht erlauben, mithilfe von CASE -, WENN im inneren.
Diese Bibliothek Feste meine Probleme, so ist es vielleicht hilfreich sein wird.
InformationsquelleAutor der Antwort user1838937