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 :

Requ�tes SQL "directes" [D�butant(e)]


Sujet :

Symfony PHP

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Par d�faut Requ�tes SQL "directes"
    Bonjour � toutes et tous.

    Je d�bute en Symfony2, et j'ai un probl�me, pour lequel je bloque un peu.
    Sur mon projet, j'ai de grosses requ�tes SQL � lancer, que je ne souhaite pas basculer en ORM. Ce sont des requ�tes � plusieurs lignes, avec des left outer join en pagaille...
    J'ai trouv� comment faire �a dans les controlleurs :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = "Ma requête sql...."
    $connection = $this->getDoctrine()->getConnection();
    $result = $connection->query($sql);  
    while ($row = $result->fetch()) {
     .......
    }
    Et jusque l�, tout va bien.
    En revanche, je voudrais maintenant faire la m�me chose dans les Entity, et l�... je n'arrive � rien. Est-ce que quelqu'un pourrait m'aider ou me guider ?

  2. #2
    Expert confirm�

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par d�faut
    En tout logique t'as base est comme un arbre, l'ORM permet de le parcourir
    si t'as vraiment une requ�te sp�cifique qui ne s'applique pas au base de l'ORM, tourne toi directement vers le repository : http://symfony.com/doc/current/book/...sitory-classes

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Par d�faut
    Merci pour ta r�ponse, mais...

    Il n'y a pas que les objets "s�lectionnables", j'ai aussi des fonctions PL/PgSQL � lancer. En fait, je suis en train d'�tudier la faisabilit� de porter un projet existant en php "classique" vers Symfony, et c'est un des pr�requis de pouvoir lancer du sql sans passer syst�matiquement par l'ORM (m�me si cela doit �tre marginal)

    J'ai tent� la m�thode indiqu�e (je sais, c'est moche et pas s�curis�, c'est juste pour valider le fonctionnement)

    dans le repository :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    public function query($sql)
    {
            return $this->getEntityManager()
                ->createQuery($sql)
                ->getResult();
    }
    dans le entity :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function charge($id)
    {
        	$em = $this->getDoctrine()->getEntityManager();
    		$products = $em->getRepository('StephFilmBundle:Test')->query("select * from test");	
    		print_r(products);
     
    }
    Dans mon controller :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    $vtest = new Test;
    $vtest->charge(2);
    Et j'ai droit � ce message d'erreur :
    Fatal error: Call to undefined method Steph\FilmBundle\Entity\Test::getDoctrine() in /home/steph/public_html/film/src/Steph/FilmBundle/Entity/Test.php on line 37

  4. #4
    Expert confirm�

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par d�faut
    oula non c'est pas dutout �a, et l'entity ne doit pas contenir les requ�tes,
    montre ta vrai requ�te

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Par d�faut
    Une requ�te typique est

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    select * from detail_vue($client) as resultat
    Detail_vue est une fonction PL/PGSQL qui retourne un setof varchar(255)

  6. #6
    Expert confirm�

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par d�faut
    dans ton repository

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    public function getDetailClient($id)
    {
        return $this->getEntityManager()
            ->createQuery('SELECT * from detail_vue(:id) AS resultat')
            ->setParameter('id', $id);
            ->getResult();
    }
    dans ton controlleur

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $em = $this->getDoctrine()->getEntityManager();
    $products = $em->getRepository('StephFilmBundle:Test')->getDetailClient($id);

Discussions similaires

  1. [Toutes versions] Requ�te SQL avec Simples et Doubles Quotes
    Par Roums dans le forum Macros et VBA Excel
    R�ponses: 7
    Dernier message: 25/03/2010, 10h00
  2. Java requ�te SQL quote antislash
    Par ritchie23 dans le forum D�buter avec Java
    R�ponses: 11
    Dernier message: 01/10/2008, 16h50
  3. [Requ�te/SQL]Pb de "quote" avec un type memo
    Par Tintou dans le forum Requ�tes et SQL.
    R�ponses: 11
    Dernier message: 26/04/2007, 15h47

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