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

Zend_Db PHP Discussion :

Faire des requetes SQL avec Zend


Sujet :

Zend_Db PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 156
    Points : 67
    Points
    67
    Par défaut Faire des requetes SQL avec Zend
    Bonjour je débute sous Zend et je voudrais faire des requetes SQL, mais je ne sais pas trop comment faire

    Exemple de requete que je souhaite faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT offre_contrat, offre_activite, offre_dep 
    FROM offre
    WHERE offre_contrat=.... AND offre_activité=... AND offre_dep=...
    Les "..." sont des variable récupéré d'un formulaire

    Merci de votre aide!

  2. #2
    Membre à l'essai

    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $db = Zend_Registry::get("dbAdapter");
    $select = $db->select();
    $select->from('offre', array('offre_contrat', 'offre_activite', 'offre_dep'));
    $select->where('offre_contrat= ?', $offre_contrat);
    $select->where('offre_activite= ?', $offre_activite);
    $select->where('offre_dep= ?', $offre_dep);
    dans ce cas ci-dessus, c'est une clause AND par défaut. Si par exemple tu aurai voulu faire une clause OR, tu aurai du écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $select->where('offre_contrat= ?', $offre_contrat);
    $select->where('offre_activite= ?', $offre_activite);
    $select->orWhere('offre_dep= ?', $offre_dep);
    en espérant que ça t'aidera.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 156
    Points : 67
    Points
    67
    Par défaut
    comment faire pour afficher le resultat dans la vue correspondante, car cette requete est effectuée dans le controller, et que je veux afficher les résultats dans une vue

    Merci

  4. #4
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    car cette requete est effectuée dans le controller
    Pas bien... Tu devrais lire quelques tutos en plus

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 156
    Points : 67
    Points
    67
    Par défaut
    dans la vue rech j'ai un formulaire, et dans le controller, je test si le formulaire a bien été rempli, je recupère les valeurs, puis j'effectu la requete...

    Ce n'est pas comme cela qu'il faut faire ? quelqu'un peut me filer des tuto a ce sujet ?

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu as ce qu'il te faut ici : http://zend-framework.developpez.com/

  7. #7
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    En fait, normalement tu dois faire tes requêtes SQL dans le modèle, si tu souhaite suivre une architecture MVC. Bon, ceci dit, les gros porcs (comme moi) en mettent aussi quelques unes dans les controllers.
    Pour répondre à ta 1ère question, moi je fais comme ça pour faire passer des variables à ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $texteAAfficher='qsdf';
    $this->view->texte=$texteAAfficher;
    Et dans la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $this->texte;

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 156
    Points : 67
    Points
    67
    Par défaut
    Désolé, c'est moi me suis mal exprimé. Ma requete est ecrite dans le model Offre
    donc dans le controleur je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $offre = new Offre();
    $result = $offre->recherche();
    $data = $result->fetchAll();
     
    $this->view->offres = $data;
    et dans la vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($this->offres as $offre):
       echo $offre->offre_nom;
    endforeach;
    Mais ca ne marche pas...

  9. #9
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    fetchAll ne retourne pas un objet. C'est un tableau donc tu dois faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($this->offres as $offre):
        echo $offre['offre_nom'];
    endforeach;
    Edit: tu peux aussi modifier la valeur de retour avec setFetchMode()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setFetchMode(Zend_Db::FETCH_OBJ);
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 156
    Points : 67
    Points
    67
    Par défaut
    Merci beaucoup, j'ai bien mieu compris!!

    Dernière question:
    j'affiche le résultat de la requete en dessous de mon formulaire, comment faire pour que le resultat ne soit afficher seulement si le formulaire a été soumis ?

    Merci

  11. #11
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    Ben tu dois faire un test dans le controller puis passé une valeur boolean à ta vue et si true tu affiche la requête et sinon pas...
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 156
    Points : 67
    Points
    67
    Par défaut
    Encore merci, c'était tout bete et j'y ai meme pas pensé...
    C'est tout bon.

  13. #13
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2012
    Messages : 45
    Points : 19
    Points
    19
    Par défaut comparaison
    Bonjour, je veux comparer 2 valeurs de 2 tables différente pour l'affichage de mon résulta, autrement je veux faire :
    "select *
    from fournisseur F, frn_contact C
    where F.code_clt = C.code_clt

    Comment puis-je le faire SVP ? Merci d'avance

  14. #14
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Attention la mise en forme d'une requête sous Zend énoncé plus haut ne respecte pas tout, en outre les quotes qui changent d'un SGBD à l'autre.

    Donc si la requête est faite dans le modèle au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select->where('offre_contrat= ?', $offre_contrat);
    il faudrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select->where($this->_db->quoteIdentifier('offre_contrat') . ' = ?', $offre_contrat);
    Pour la requête de comparaison tu peux faire une jointure, où encore garder ta syntaxe, je te dirais que cela dépend fortement de la volumétrie mais étalements des index de tes tables.

    Petite astuce pour voir ce que ta requête Zend donne en SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Debug::dump($select->__toString());

  15. #15
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2012
    Messages : 45
    Points : 19
    Points
    19
    Par défaut
    salut tout le monde
    j'ai 2 tables :
    1. Une table client avec en clé primaire code_client
    2. Une table cntct_clt avec en clé étrangère code_client
    Mon problème que quand je clique afficher contacts d'un fournisseur donnée on m'affiche touts les contact de tous les fournisseur hors que j'ai besoin d'afficher que les contacts d'un fournisseur tel !
    Merci pour votre aide, j'en ai tellement besoin
    le code que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Library_Model_ListeContact {
        public function listeContact($CODE_FRN = null) {
    if($CODE_FRN){
            $db = Zend_Db_Table::getDefaultAdapter();
               $selectCntcFRN= $db->fetchAll($db->select()
                                            ->from(array('F' => 'fournisseur'))
                                            ->joinLeft(array('Fn' => 'frn_contact'),
                                                        'F.fournisseur = Fn.frn_contact',
                                                        array())
                                            ->where('F.fournisseur= ?', $CODE_FRN));
            return(sizeof($selectCntctFRN) > 0 ? $selectCntctFRN : false);
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire une requete sql avec hibernate
    Par Babas007 dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/05/2011, 08h18
  2. faire des requetes sur la table attributaire avec sql
    Par darkaminoo dans le forum SIG : Système d'information Géographique
    Réponses: 3
    Dernier message: 13/12/2010, 18h29
  3. des requetes sql avec vb.net dans asp.net
    Par fishingman dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/05/2010, 21h45
  4. Réponses: 8
    Dernier message: 22/06/2009, 18h06
  5. requete sql avec between sur des champs de type Date
    Par ersoufiane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/08/2006, 19h43

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