Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-04-2007 14:19:48

rod
Administrateur
Lieu: Tours
Date d'inscription: 01-03-2007
Messages: 97
Site web

[Résolu][Zend_Db][0.9.1] Exploiter le résultat de la méthode find()

Mon modèle :

Code:

<?php

class Clients extends Zend_Db_Table_Abstract
{
    protected $_name = 'clients';
    protected $_primary = 'id';
    protected $_sequence = true;
}

?>

Mon action :

Code:

...
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

 

#2 03-04-2007 15:01:54

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu][Zend_Db][0.9.1] Exploiter le résultat de la méthode find()

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)

Code:

$rowset = $clientManager->find(51);

if ($rowset->count() == 1) {
    $client = $rowset->current();
    echo "id:".$client->id."<br/>";
    echo "name:".$client->email."<br/>";
}

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 03-04-2007 15:06:46

rod
Administrateur
Lieu: Tours
Date d'inscription: 01-03-2007
Messages: 97
Site web

Re: [Résolu][Zend_Db][0.9.1] Exploiter le résultat de la méthode find()

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 :

Code:

...

$monClient = $mesClients->find($monId);
$monClient = $monClient->current();            

...

Hors ligne

 

#4 03-04-2007 15:27:39

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

Re: [Résolu][Zend_Db][0.9.1] Exploiter le résultat de la méthode find()

persque aussi court de faire

Code:

$monClient = $mesClients->find($monId)->current();

smile 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

 

#5 03-04-2007 15:51:58

rod
Administrateur
Lieu: Tours
Date d'inscription: 01-03-2007
Messages: 97
Site web

Re: [Résolu][Zend_Db][0.9.1] Exploiter le résultat de la méthode find()

Bien vu !

Hors ligne

 

#6 03-04-2007 23:51:20

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Résolu][Zend_Db][0.9.1] Exploiter le résultat de la méthode find()

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

 

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