Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 ?
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
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
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é
Hors ligne
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
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
Bon j'ai tenté autre chose
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
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 ?
Hors ligne
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
Pages: 1