Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut,
Je souhaiterai savoir s'il y a un moyen de récupérer un Row d'un RowSet juste avec l'id du Row en question ?
J'ai essayé la méthode find() , mais il ne fonction que avec les abstract table, j'ai cette erreur:
Fatal error: Call to undefined method Zend_Db_Table_Rowset::find()
J'ai vu aussi la méthode seek dans la documentation mais la recherche se fait par rapport à l'index du rowset et non avec l'id du row en question.
Ya t'il un moyen de récupérer un row simplement ou devrais je faire un foreach de mon rowset et récupérer mon row avec une condition ?
Merci de votre aide.
Hors ligne
pourquoi récupérer un rowset pour ensuite chercher un élément dedans ???
le principe du row er rowset c'est justement de retourner une structure adapté au besoin
si ton besoin est de chercher un élément pourquoi utiliser un rowset ??
A+JYT
Hors ligne
Dans mon cas. C'est en fonction des droits des utilisateurs en fait. Pour prendre un exemple simple.
Une personne possède plusieurs adresses.
Je le fais comme ca:
$p1 = new Personne ();
Puis avec une méthode magique je récupère les adresses de cette personne.
$rowsetAdresses = $p1->getAdresses();
Je veux avoir la possibilité de modifier ces adresses en faisant passer l'id de l'adresse à mon url. Donc de cette facon il me faut récupérer un row dans mon rowset avec l'id. Je ne peux évidemment pas faire un find()->current() de l'id directement dans la table car un utilisateur malveillant pourrait être tenté de passer l'id d'une adresse qui ne l'appartient pas donc de le modifier.
Dernière modification par wiwidumi (06-05-2009 14:34:32)
Hors ligne
$array = array_filter($rowset->toArray(), create_function('$row', 'return $row->id == ' . $id . ';'));
retourne tous les rows d'on l'id == $id
class IdFilter extends FilterIterator { private $userFilter; public function __construct(Iterator $iterator , $filter ) { parent::__construct($iterator); $this->idFilter = $filter; } public function accept() { $row = $this->getInnerIterator()->current(); return ($row->id == $this->idFilter) ; } } $iterator = new IdFilter($rowset->getIterator(),$id); $row = $iterator->next();
le même avec la SPL
pour généraliser le truc dériver la classe rowset de zf surcharger les méthodes adéquat et l'utiliser comme décrit dans la doc
class Bugs extends Zend_Db_Table_Abstract { protected $_name = 'bugs'; protected $_rowsetClass = 'MyBugsRowset'; }
A+JYT
Dernière modification par sekaijin (06-05-2009 15:07:47)
Hors ligne
Oki, merci bien, j'utilise ta première solution et cela fonctionne très bien.
Hors ligne