symfony2: comment utiliser group_concat dans QueryBuilder
Je vais avoir imbriquée-ensemble (en utilisant Gedmo arbre) entité appelée "Emplacement". L'entité "Appartement" a location_id et ce que je dois faire pour mettre en correspondance la valeur scalaire appelé par exemple "chemin d'accès" à la requête qui renvoie tous les appartements.
Dans Doctrine1, j'ai eu ce 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") ;
}
Remarque: "o" alias est utilisé pour la première question.
Ce code me permettrait d'utiliser
{foreach .... as $appartment}
{$appartment->path}
...
Qui serait d'impression:
Australia, Victoria, Melbourne, ...other children...
Comment faire la même chose en D2? Et la façon même de la doctrine extenstions dans mon projet symfony2?
- Double Possible de symfony2: à l'Aide de group_concat dans QueryBuilder(Doctrine)
Vous devez vous connecter pour publier un commentaire.
Si vous voulez l'utiliser dans le QueryBuilder, vous devez :
1) ajouter DQL fonctions GroupConcat: GroupConcat
2 ) Enregistrement GroupConcat :DQL Fonctions Définies par l'Utilisateur
une autre alternative est d'utiliser NativeQuery :Natif SQL
Dans symfony2 l'enregistrement d'une fonction DQL c'est très simple il suffit d'ajouter GROUP_CONCAT dans la configuration.yml comme:
Pour plus d'informations, visitez Enregistrement Personnalisé DQL Fonctions
Si l'un tombe sur ce post, il y a maintenant un Extensions Doctrine dépôt sur Github. Les pensions de titres a des instructions sur la façon de l'utiliser. Vous pouvez utiliser composer pour l'installer, puis utilisez une fonction qui vous intéresse.
EDIT:
Pour le bien de l'utilisateur Tushar, la façon de les utiliser GROUP_CONCAT dans Doctrine2 du DQL est simple installer Extensions Doctrine:
Pour l'activer: ajoutez la ligne suivante dans votre fichier de configuration.yml:
Puis dans votre code, vous devriez être en mesure maintenant d'utiliser le Groupe Concat dans votre DQLs:
Ou, dans le cas de la question d'origine:
Simplement un ajout à @une.aitboudad réponse:
Le DQL fonction GroupConcat lié semble avoir une «prise en charge limitée pour GROUP_CONCAT».
Ici, c'est la pleine version de soutien :
La configuration est comme il l'a mentionné.
J'ai eu le même problème. GROUP_CONCAT ne permet pas l'utilisation de CAS-LORSQU'à l'intérieur.
Cette bibliothèque fixe mes questions, alors peut-être qu'il sera utile.