Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-05-2008 00:38:51

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

[Zend_Db][1.5] Ajouter un attribut à un objet

Je débute avec ZF et j'ai un petit soucis. J'ai d'ailleurs peur que ce soit plus un problème sur la POO en général que sur ZF, mais je tente ma chance.

J'ai une class Users de ce type :

Code:

class Users extends Zend_Db_Table_Abstract {
    
    protected $_name         = 'users';

}

Je récupère les utilisateurs de cette façon dans un contrôleur :

Code:

$usersTable = new Users();
$usersQuery = $usersTable->select()
                     ->where('profil = "membre" || profil = "admin"')
                     ->where('statut = "actif"')
                     ->order('nom');
        
$usersList = $usersTable->fetchAll($usersQuery);

Le truc c'est que je voudrais, dans mon contrôleur, ajouter un attribut à mon objet, et je ne trouve pas du tout la façon de procéder.
J'ai bien tester ça :

Code:

foreach($usersList as $key => $user){

     $user->monNouvelAttribut = 'valeur';
}

Mais sans succès. Quelqu'un a une idée pour m'aider ?

Merci d'avance et excusez-moi si ce soucis est plus un problème de POO que de ZF

Dernière modification par neojick (14-05-2008 00:42:21)


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#2 14-05-2008 09:26:52

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

Je ne comprends pas vraiment ce que tu veux: "monNouvelAttribut " serait le champs d'une table ? Apparemment non, alors tu veux le sortir d'ou ? Je ne crois pas avoir vu sur ce forum ni dans les tutos qu'on pouvait ajouter des champs qui n'existent pas dans la table, d'un point de vue fonctionnel et d'éthique (le model n'est pas là pour ça).

A mon avis, tu t'y prends mal, concrétement tu veux stocker quoi ?

Hors ligne

 

#3 14-05-2008 09:43:02

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

Hello,

Indépendamment du fait que je ne comprenne pas non plus la demande, l'utilisation de foreach travaille sur une copie de ton élément donc ton élément initial n'est pas modifié.

Si je ne me trompe pas, ceci fonctionne :

Code:

foreach($usersList as $key => &$user){

     $user->monNouvelAttribut = 'valeur';
}

Juste le & nécessaire depuis PHP5 (foreach())

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#4 14-05-2008 10:02:58

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

whitespirit a écrit:

Je ne comprends pas vraiment ce que tu veux: "monNouvelAttribut " serait le champs d'une table ? Apparemment non, alors tu veux le sortir d'ou ? Je ne crois pas avoir vu sur ce forum ni dans les tutos qu'on pouvait ajouter des champs qui n'existent pas dans la table, d'un point de vue fonctionnel et d'éthique (le model n'est pas là pour ça).

A mon avis, tu t'y prends mal, concrétement tu veux stocker quoi ?

En gros, je veux faire des stats d'utilisateurs.

Je liste mes users comme indiqué ci-dessus, et ensuite, je veux récupérer pour chaque user le nombre d'articles écrits, le nombre de messages postés dans le forum.

Pour le '&', je teste dès mon retour à midi.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#5 14-05-2008 10:32:50

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

Ce que tu aurais besoin serait plutôt une bonne requête sql non ? Ecris ta requête depuis un éditeur peut-être que t'y arriveras plus facilement, après soit tu l'exécute tel quel, ou soit tu la passe avec des ->select() & co. Peut-être que tu t'y perds parceque tu veux faire tout d'un coup, c'est à dire, récupérer les utilisateurs et pour chaque utilisateur récupérer ses stats. Si c'est le cas, exécute deux requêtes distinctes ou bien fais une belle jointure.

Hors ligne

 

#6 14-05-2008 10:36:28

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

En me reveillant ce matin, j'ai pensé à une jointure. Sur que ce serait plus simple. Je vais m'y atteler ce soir.
Par contre, pour revenir à ma question de départ, y'a un moyen de rajouter facilement un attribut à un objet ?


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#7 14-05-2008 12:20:38

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

oui, c'est un objet : dans ta classe tu déclares : 'private $ta_variable', mais encore une fois je ne pense pas que ce soit une bonne idée.

Pour les joitures, Sekajin le Merveilleux m'a sauvé l'autre jour en me donnant son code. Tu trouveras le lien qq part ici : http://www.z-f.fr/forum/viewtopic.php?id=1195. Essaie le code sur son site, si tu ne fais pas d'erreur de recopie (les copier/coller sont foireux), ça marche du premier coup et tu tappes ta requêtes vraiment facilement.

Sinon je te conseille dans un premier temps de procéder en 2 étapes comme je l'ai dit il y'a un post de cela, si tu n'es pas sur de toi.

Dernière modification par whitespirit (14-05-2008 14:27:14)

Hors ligne

 

#8 14-05-2008 14:05:27

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

Sekajin m'a sauvé aussi plusieurs fois... j'ai même imprimé l'intégralité de son blog :p

Merci des conseils je regarde ça ce soir.

Dernière modification par neojick (14-05-2008 14:05:41)


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#9 14-05-2008 14:54:03

zelig
Nouveau membre
Date d'inscription: 08-05-2008
Messages: 4

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

Salut,
Je pense que t'as tous ce qu'il te faut, mais au fait, un petit conseil qui peut être très utile!
Pour ton exemple

Code:

$usersTable->select()->__toString();

ou encore

Code:

die($usersTable->select()->__toString());

ça te permettera de voir le SQL généré par Zend, comme ça tu vois mieux ce qu'il demande à la base de données, et tu peut tester directement sur tes bases de données (sur phpmyadmin par exemple, si tu utilise mysql). C'est assez utils si t'as des jointures sur plusieurs tables par exemple, pour voir un peut où est l'erreur!
Cordialement.

Dernière modification par zelig (14-05-2008 14:55:18)

Hors ligne

 

#10 14-05-2008 16:29:41

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

Je dirais meme plus , le ->__toString ne sers a rien,

Code:

die($usersTable->select())

suffit, et oui, __toString a été fait pour ca wink

Hors ligne

 

#11 14-05-2008 16:53:54

zelig
Nouveau membre
Date d'inscription: 08-05-2008
Messages: 4

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

C'est vrai aussi (__toString() implicitement).

Hors ligne

 

#12 17-05-2008 13:09:18

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: [Zend_Db][1.5] Ajouter un attribut à un objet

C'est vachement plus simple avec une belle jointure. Merci


Chan IRC de ZF en français : zftalk-fr

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