Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Mon modèle :
<?php class Clients extends Zend_Db_Table_Abstract { protected $_name = 'clients'; protected $_primary = 'id'; protected $_sequence = true; } ?>
Mon action :
... public function modifierAction() { Zend_Loader::loadClass('Clients'); $mesClients = new Clients(); $monId = (integer)$this->_getParam('id'); $monClient = $mesClients->find($monId); /** * Ne marche pas, retourne: * Notice: Undefined property: Zend_Db_Table_Rowset::$id */ echo $monClient->id; } ....
J'ai essayé avec la méthode fetchRow() et ça fonctionne. Mais la méthode find() est là pour ça donc autant l'utiliser. Comment faîtes vous de votre côté pour exploiter l'objet retourné par la méthode find() ?
Hors ligne
Bonjour,
find renvoie un rowset et pas un row. Pour récupérer un élément tu peux utiliser le code suivant (à adapter à ton code)
$rowset = $clientManager->find(51); if ($rowset->count() == 1) { $client = $rowset->current(); echo "id:".$client->id."<br/>"; echo "name:".$client->email."<br/>"; }
A+, Philippe
Hors ligne
Merci,
Je trouve ça un peu dommâge de renvoyer un jeu de résultat lorsqu'il y a qu'une ligne. Vu que je suis sûr qu'en retour j'aurai une seule ligne, je fait :
... $monClient = $mesClients->find($monId); $monClient = $monClient->current(); ...
Hors ligne
persque aussi court de faire
$monClient = $mesClients->find($monId)->current();
Si tu es sur de n'avoir qu'un résultat (souvent le cas avec des id de DB...)
Dernière modification par Mr.MoOx (03-04-2007 15:28:27)
Hors ligne
Oui Rod, c'est un comportement qui a changé.
ZF gère maintenant la multi recherche. Tu veux les clients n°=1 et 2 ?
$clients = $tableClient->find(array(1,2));
Le retour de find() est systématiquement un rowset. Ils auraient pu tester par un count() si il y a un résultat unique, et renvoyer directement le row, en effet, mais il est toujours bon pour une méthode de ne renvoyer qu'un et un seul type de données.
Hors ligne
Pages: 1