Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-06-2008 17:20:17

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

[résolu] Zend_db_table comment modifier une requete

Hello,
j'essaye de créer une fonction sur une classe metier héritant de Zend_db_table_abstract mais je n'arrive pas à modifier la requete en elle meme.
Pouvez vous m'aider ?

Petite question au passage, faut il hériter de Zend_db_table ou Zend_db_table_abstract ?

Code:

class Site extends Zend_Db_Table_Abstract  {
    
    protected $_name = 'site';
    protected $_primary = 'id_site';
    
    
    function bestSite( $nbSite ){

        
        $this->select()
                ->from( array('s' => 'site', 'o' => '') )             
                ->joinUsing('operateur', 'id_ope')
                ->where('s.id_cat = ?', Dao::categorie())
                ->limit(0, $nbSite);
        
        echo  $this->select(); //M'affiche une requete sans mes conditions
                            
        return $this->fetchAll();
    }
}

merci

Dernière modification par bucheron (16-06-2008 16:23:38)

Hors ligne

 

#2 13-06-2008 00:00:56

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [résolu] Zend_db_table comment modifier une requete

Ton echo $this->select() n'affiche rien c'est normal car ca n'est pas le même que celui du dessus!!
$this->select() génère un select, tu dois donc le stocké dans une variable pour pouvoir travailler dessus!
Essaye ça

Code:

function bestSite( $nbSite ){
        $select = $this->select()
                ->from( array('s' => 'site', 'o' => '') )             
                ->joinUsing('operateur', 'id_ope')
                ->where('s.id_cat = ?', Dao::categorie())
                ->limit(0, $nbSite);
        
        echo  $select;
        return $select->query()->fetchAll();
    }

A part ça, utiliser le ->from() ici est un peu inutile car il est généré automatiquement.

/!\ Pour faire des jointures automatiques je te conseille ce très bonne article que j'ai mis en application cette après-midi même.
http://sekaijin.ovh.org/?p=21
PS: Prends bien les commentaires en compte, surtout le dernier que j'ai posté wink

Hors ligne

 

#3 16-06-2008 11:00:30

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: [résolu] Zend_db_table comment modifier une requete

merci mais j'ai du mal à débugger ce genre de requete car je n'ai pas vraiment d'info.

voila ce que j'ai tenté afin de gérer moi meme ma requete

Code:

    function bestSite( $nbSite ){
        
        $req = "REQUETE ...";
        $select = $this->select()->query($req);
                            

        $tab = $select->fetchAll(PDO::FETCH_ASSOC);
        
        foreach ($tab as $val){
            echo $val["id_site"]." ".$val["ope_url_rewrite"]."<br/>";
            
        }
    }

Sauf que ca ne me donne pas du tout les memes résultats que quand je le tape sous phpmyadmin!!!

j'aimerais savoir pourquoi.

De plus est ce quelqu'un connais un tuto pour architecturer ses classes modèles celon des requetes définis par moi et non pas en utilisant l'objet zend_db_table?

Merci

Dernière modification par bucheron (16-06-2008 11:00:47)

Hors ligne

 

#4 16-06-2008 13:12:56

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: [résolu] Zend_db_table comment modifier une requete

Bon j'ai tenté autre chose

Code:

class Site extends Zend_Db_Table_Abstract{
    
    protected $_name = 'site';
    protected $_primary = 'id_site';
    
    
        function __construct(){    }
    
        function bestSite( $nbSite ){
            
            $req = "SELECT * FROM site LIMIT 0, $nbSite";

            $select = $this->_db->query($req);
            
            return $select->fetchAll();
            
        }
        
}

et voila l'erreur que j'obtiens !!! je ne comprend pas très bien
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\LemonadeSVN\projet\application\models\Site.php on line 37

et par la suite je souhaiterais savoir comment  créer une requete comme ceci:
$req = "SELECT * FROM site LIMIT 0, ?"; ou le ? serait construit via un tableau.

Merci de votre aide

Hors ligne

 

#5 16-06-2008 15:11:55

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: [résolu] Zend_db_table comment modifier une requete

Tu doit déclarer ton objet _db. Et tu ne peut pas faire un $this->$db ,

Tu est dans une classe, il ne connait pas ce que tu as déclaré dans ton bootstrap .

Tu devrais mettre ton _db dans le registre, pour pouvoir le récuperer ici en faisant un Zend_Registry::get('tonDb')



Pour ta requete, pourquoi le construire via un tableau ? yikes

Hors ligne

 

#6 16-06-2008 16:23:22

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: [résolu] Zend_db_table comment modifier une requete

merci pour l'info.
j'ai réussit à récupérer l'objet db avec un $db = $this->getDefaultAdapter();

concernant le tableau je trouve ça beaucoup plus propre.
En fait j'ai trouvé ma solution

c'est avec l'utilisation de la fonction query:
$db->query($req, array());

Merci ....

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages