Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je suis en train de construire ma première application Zend Framework, j'ai suivit le quickstart, donc chaque table comport (comme dans le quick start) un model, un mapper et un accès à la table via extends Zend_Db_Table_Abstract (si j'ai tout pigé )
Architecture :
Application/
|____ config/
|____ controllers/
|____ models/
| |__ dbtable/
|____ views/
| |__ script/
|
|__ bootstrap.php
Maintenant j'aimerais faire un ou plusieurs fichiers spéciaux pour des requêtes personnel sur plusieurs table?
class Default_Model_Special extends Zend_Db_Table_Abstract { protected $_dbInstance; public function getDbInstance() { // comment récupéré l'instance ? } public function maRequete() { $select = $this->_dbInstance->select(); //Exemple de Zend Framework bien développer en PHP $select->from(array("r"=>"reservation"),"usage") ->join(array("s"=>"room"), "r.id_room=s.id", array("salle"=>"name")) ->join(array("u"=>"user"), "r.creator=u.id", array("personne"=>"firstname")) ->where("s.id=1") ->where("u.id=2") ->limit(3); $this->_dbInstance->fetchAll($select); } //.....etc }
Dans un premier temps j'aimerais récupérer l'instance $db afin que mon fichier de soit pas lier à une table pour ensuite pouvoir créer des requêtes dans des fonctions selon les besoins.
Est-ce possible et est-ce la bonne méthode ?
Y a-t-il d'autre solutions, méthodes ?
Dede
Hors ligne
Hello,
class Default_Model_Special extends Zend_Db_Table_Abstract { public function maRequete() { $select = $this->select(); // sans le dbInstance //Exemple de Zend Framework bien développer en PHP $select->from(array("r"=>"reservation"),"usage") ->join(array("s"=>"room"), "r.id_room=s.id", array("salle"=>"name")) ->join(array("u"=>"user"), "r.creator=u.id", array("personne"=>"firstname")) ->where("s.id=1") ->where("u.id=2") ->limit(3); $this->getAdapter()->fetchAll($select); // getAdapter au lieu de instance } //.....etc }
Pour le paramétrage, soit un setAdapter(), soit Zend_Db_Table_Abstract::setDefaultAdapter().
A+
Hors ligne
Merci mikaelkael,
j'essaie ça et je te dis...
Dede
Hors ligne
Et bien j'ai chercher mais je n'y arrive pas,
je dois avoir loupé et étape.. et surtout, je ne suis pas doué
J'ai mis le fichier ci-dessus dans application/models/Special.php,
j'appel ce fichier de cette manière dans le controleur :
public function indexAction() { $special = new Iadmin_Model_Special(); $result = $special->maRequete(); var_dump($result); // pour le test }
Mais je ne trouve pas ou faire l'appel à setAdapter() ou Zend_Db_Table_Abstract::setDefaultAdapter(), j'ai essayé dans le "Special.php" et dans le controlleur, le mieux que j'ai eu c'est :
La table spécifié ('') n'existe pas ....
Il me met souvent "ne peut instancier ou erreur dans le select" ?
help please....
Dede
Dernière modification par Dede (07-07-2009 15:03:43)
Hors ligne
Alors du coup j'ai fait ça :
class Default_Model_Special //suppression de extends Zend_Db_Table_Abstract { protected $_dbAdaptateur; public function setAdaptateur() { $front = Zend_Controller_Front::getInstance(); $bootstrap = $front->getParam('bootstrap'); return $bootstrap->getResource('db'); } public function getAdaptateur() { if (null === $this->_dbAdaptateur) { $this->_dbAdaptateur = $this->setAdaptateur(); } return $this->_dbAdaptateur; } public function maRequete() { //Exemple de Zend Framework bien développer en PHP $select->from(array("r"=>"reservation"),"usage") ->join(array("s"=>"room"), "r.id_room=s.id", array("salle"=>"name")) ->join(array("u"=>"user"), "r.creator=u.id", array("personne"=>"firstname")) ->where("s.id=1") ->where("u.id=2") ->limit(3); $this->getAdaptateur()->fetchAll($select); } }
Mais je ne suis pas sûr que ce soit la marche à suivre ?
En tous cas c'est bien l'idée, récupérer l'adaptateur pour faire des requête particulières ?
Si je suis sur la mauvaise voie dit le moi avant que je prenne de mauvaise habitude .
Dede
Hors ligne
de memoire tu passe un array de config à ta table pour lui donner l'adpter de ton choix ou alors tu choisit l'adapteur par defaut et tu ne le passe pas en param
Hors ligne
?? là c'est du chinois, j'espère pas pour trop longtemps
Pour moi de ce que je comprend, pour le moment je récupère l'adaptateur que récupère les autre modèles abstrait.
Est bien ça ?
Et toujours la même question, est-ce une bonne méthode?
j'ai un peu de mal entre le bouquin (plus à jour) et les évolution des méthodes de cette version
??
Hors ligne
Hello,
Tu es tout simplement en train de copier Zend_Db_Table_Abstract.
Regardes du côté de : http://framework.zend.com/manual/fr/zen … ng.adapter ou http://framework.zend.com/manual/fr/zen … lt-adapter
A+
Hors ligne