Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Il est tard, j'ai passé ma soirée sur ce problème, j'ai la tête en vrac, je vais donc tenter de faire bref mais complet :p
J'ai réalisé une classe d'accès à une table nommée "messages", par le biais de Zend_Db_Table. Dans cette classe, j'ai cette méthode :
public function countNotRead() { $select = $this->select(); $select->from($this, 'COUNT(id_message) as `count`') ->where('destinataire = ?', $this->auth->getIdentity()->id_joueur); $rows = $this->fetchAll($select); }
Et lors de l'appel de la méthode, je tombe sur cette erreur :
Catchable fatal error: Argument 1 passed to Zend_Db_Select::__construct() must be an instance of Zend_Db_Adapter_Abstract, null given, called in /home/guillaume/workspace/library/Zend/Db/Table/Select.php on line 69 and defined in /home/guillaume/workspace/library/Zend/Db/Select.php on line 142
Fatal error: Call to a member function quoteInto() on a non-object in /home/guillaume/workspace/library/Zend/Db/Select.php on line 786
Sur mon bootstrap, j'ai ce code :
// $config correspond à un .ini $db = Zend_Db::factory($config->db); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db);
Si, dans ma méthode, je fais print_r($this->getAdapter());, rien ne s'affiche.
Si je fais print_r(Zend_Registry::get('dbAdapter'));, l'ensemble des informtions concernant l'adapter s'affichent.
Bref, je ne comprend rien. Quelqu'un aurait-il une piste ?
Merci d'avance
Dernière modification par versgui (31-07-2008 00:37:57)
Hors ligne
Moi je l'écris comme ca cette ligne :
$select->from($this, 'COUNT(id_message) as `count`')
J'avais des problèmes avec 'as' du coup je fais comme ceci
$select->from($this->_name, array('count' => 'COUNT(id_message)')
Hors ligne
Hum, oui, il y a plusieurs façons de faire, mais mon problème ne vient pas de la requête mais bien de l'adapter :\
Hors ligne
Bon, j'ai réussi à contourner mon problème en forcant l'utilisation de l'adapter :
public function __construct() { $this->_db = Zend_Registry::get('dbAdapter'); }
Mais c'est pas top comme méthode, je préférerais que ce soit automatique... Si quelqu'un à une réponse à mon problème...
Hors ligne
Hello
J'y crois moyennement (enfin j'ai pas vu ta classe de table donc je sais pas trop), mais la seule difference que j'y vois c'est qu'au lieu de
Zend_Db_Table::setDefaultAdapter($db);
j'ai
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Hors ligne
Bien vu, mais ça ne change rien : l'erreur est toujours là.
La classe de ma table ne comprend rien d'autre que ce que j'ai mit sur ce topic.
Hors ligne
Salut,
As tu d'autres méthodes dans ta classe qui font appel à la bdd qui fonctionnent (est-ce un pb lié à la méthode ou à la classe en général) ?
Personnellement, dans le bootstrap j'utilise
Zend_Db_Table::setDefaultAdapter($db);
et mes classes héritent de Zend_Db_Table_Abstract
class Toto extends Zend_Db_Table_Abstract { function test () { $db = $this->getAdapter(); $select = $db ->select(); } }
Dernière modification par grandlap (01-08-2008 08:24:59)
Hors ligne