IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Sonata user - createQuery requete recursive


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut Sonata user - createQuery requete recursive
    Bonjour,

    J'aimerai exécuter cette requête pour récupérer la liste des utilisateurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req =
        "select *, @pv:=id as id
         from `fos_user_user`
         join
         (select @pv:=1)tmp
         where user_id=@pv";
    Dans la fonction createQuery($context = 'list')

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
        public function createQuery($context = 'list')
        {
            $req =
                "select *, @pv:=id as id
                from `fos_user_user`
                join
                (select @pv:=1)tmp
                where user_id=@pv";
     
            //$em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getManager();
     
            $securityContext = $this->getSecurityContext();
            $user = $securityContext->getToken()->getUser();
     
            $query = parent::createQuery($context);
            /* $query = parent::createQuery($req); */
            /* $query = $em->createQuery($req); */
            /*$query->addSelect('@pv:=id')
                ->join('(select @pv:=1)tmp', ':id')
                ->andWhere('user_id=@pv');*/
     
            return $query;
        }
    Mais impossible d’exécuter la requête :

    avec /* $query = parent::createQuery($req); */ : rien ne se passe.

    avec /* $query = $em->createQuery($req); */ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Catchable Fatal Error: Argument 1 passed to Sonata\AdminBundle\Datagrid\Datagrid::__construct() must implement interface Sonata\AdminBundle\Datagrid\ProxyQueryInterface
    avec /*$query = parent::createQuery($context); $query->addSelect('@pv:=id') */ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    An exception has been thrown during the rendering of a template ("[Syntax Error] line 0, col 10: Error: Expected IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression, got '@'") in SonataAdminBundle:CRUD:base_list.html.twig at line 29.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Par défaut
    J'ai un peu avancé :

    Dans l'entité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        /**
         * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="children")
         * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
         */
        private $user;
     
        /**
         * @ORM\OneToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="user")
         */
        private $children;
    Dans le UserAdmin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
        public function createQuery($context = 'list')
        {
            $securityContext = $this->getSecurityContext();
     
            $query = parent::createQuery($context);
     
            if(!$securityContext->isGranted('ROLE_SUPER_ADMIN'))  
            {
                $user = $securityContext->getToken()->getUser();
     
                $query->add('select', 'c')
                      ->add('from'  , 'ApplicationSonataUserBundle:User c')
                      ->orWhere($query->getRootAlias().'.id='.$user->getId());
                ;
     
                foreach ($user->getChildren()->toArray() as $user) {
     
                    $query->orWhere($query->getRootAlias().'.id='.$user->getId());
     
                    foreach ($user->getChildren()->toArray() as $user) {
     
                        $query->orWhere($query->getRootAlias().'.id='.$user->getId());
                    }
                }
            }
     
            return $query;
        }
    ça fonctionne mais j'ai 34 requêtes au lieu de 12 ... Si vous connaissez une meilleur façon de faire je suis preneur.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2007, 11h14
  2. Requete recursive avec WITH
    Par Kuroro dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 06/09/2007, 23h05
  3. Requete recursive et MySQL
    Par TangoZoulou dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/07/2007, 15h36
  4. Requete recursive : recupérer enreg. selon plusieurs dates
    Par kinder_bueno dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2007, 08h35
  5. requete recursive ( connect prior by)
    Par smedini dans le forum Oracle
    Réponses: 4
    Dernier message: 08/11/2005, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo