Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/05/2011, 10h27   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Par défaut Requête sur base de données

Bonjour cher tous!

Aujourd'hui c'est un probleme de requette sur une base de données qui me rend fou
Sur un projet j'ai utilisé deux bases de données et dans mon schema.yml à chaque fois je spécifie le nom de la base de données concernée sur mes tables.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Budget:
  connection: baseclient
  tableName: budget
  columns:
    id:
      type: integer(11)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
...
j'ai bien genere les modèles, les formulaires, les filtres, j'ai cree le sql et je l'ai insere dans ma base grace aux commandes symfony.

Ensuite j'ai genere des modules avec la commande "doctrine_generate_admin" pour les CRUD de mes tables et ça marche nickel.

Mais seulement sur un module simple "generate_module" j'essaye d'interroger ma base et j'ai une grosse erreur.
dans le fichier.table j'ai cette requette:
Code :
1
2
3
4
5
6
7
8
9
 
public function getUserByConnexion($username,$password)
    {
        $q = Doctrine_Query::create()
            ->from('Utilisateur u')
            ->where('u.username ='.$username)
            ->andWhere('u.password ='.$password);
        return $q;
    }
dans mon action :
Code :
1
2
3
4
5
6
7
8
 
        $this->username= $request->getParameter('username');
        $this->password = $request->getParameter('password');
 
 
        $this->user = Doctrine::getTable('Utilisateur')
                          ->getUserByConnexion($this->username,$this->pass)
                          ->execute();
et quand ce que le $this->user me donne dans le template
j'ai cette erreur que je ne comprend pas:

Code :
1
2
 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'distributeurvichy' in 'where clause'. Failing Query: "SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = distributeurvichy AND u.password = 27572535ce007aa408d2e145c18e64b0)"
au secours je deviens bête , il me dit qu'il ne connait pas la colonne 'distributeurvichy' ...je saisd pas mais..cette colonne n'a effectivement jamais existé dans ma base.

Si quelqu'un peut m'aider je suis preneur!!!

Merci.
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h30   #2
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Code :
1
2
3
4
5
6
7
8
public function getUserByConnexion($username,$password)
    {
        $q = Doctrine_Query::create()
            ->from('Utilisateur u')
            ->where('u.username = ?', $username)
            ->andWhere('u.password = ?', $password);
        return $q;
    }
Essai cette requete pour voir.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/05/2011, 11h01   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
On avance déjà mais on est encore loin!!
Il me retourne ce resultat:

Code :
1
2
 
<pre> Doctrine_Collection data : Array( 0 : Object(Utilisateur) ) </pre>
je sais pas si je comprends mal mais ça veut dire qu'il n'y a aucun objet qui a été retourné et pourtant il existe bel et bien dans ma table.
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 12h12   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Bon on est d'accord que la requête originel ne pouvait marcher. Corrigé par PeytaWodka.

Reste un problème purement sql, pourquoi n'y a-t-il pas de données récupérées.

Question, ton password est en claire dans ta base ???? Si non, ceci peut expliquer cela !

Piste de recherche. Lance ton application en mode dev. Dans la barre de debug tu as les requêtes sql utilisées. Regarde celle qui récupère ton user. Teste là directement dans un outil comme phpMyAdmin ou Heidi.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 12h43   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Mon mot de passe est en hash dans ma base, et je prends bien soin de transformer le mot de passe que je recupere du formulaire avant de lancer ma recherche dans la base et en plus j'ai essayer de rechercher mon user sans faire reference au mot de passe et il n'a toujour rien trouver.

Par ailleurs en executant le script que j'ai recupere dans le log
Code :
1
2
 
SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = ? AND u.password = ?) - (distributeurvichy, 27572535ce007aa408d2e145c18e64b0)
j'ai eu cette erreur
Code :
1
2
 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND u.password = ?) - (distributeurvichy, 27572535ce007aa408d2e145c18e64b0) ' at line 1
J'ai donc modifier mon code dans mon modele

Code :
1
2
3
4
5
6
7
8
9
 
public function getUserByConnexion($username,$password)
    {
        $q = Doctrine_Query::create()
            ->from('Utilisateur u')
            ->where('u.username = "'.$username.'"')
            ->andWhere('u.password = "'.$password.'"');
        return $q;
    }
J'ai eu ce script

Code :
1
2
 
SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = "distributeurvichy" AND u.password = "27572535ce007aa408d2e145c18e64b0") - ()
je l'ai teste sur phpmyadmin et j'ai eu cet erreur

Code :
1
2
 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') LIMIT 0, 30' at line 1
apparemment il doit y avoir un problème avec le LIMIT 0, 30!!?,
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h54   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
En fait quand je regarde la commande sql qui est donnée dans le fichier de log
Code :
1
2
 
SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = "distributeurvichy" AND u.password = "27572535ce007aa408d2e145c18e64b0") - ()
si je supprime le " -() " qu'il ya a la fin du script ca va me ramene l'objet que je recherche.
Mais la question est de savoir comment faire pour l'enlever depuis la requête doctrine
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 16h43   #7
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
La première requête que tu récupère semble bien fonctionnel. En effet, le -(...) n'est pas généré en sql. Il correspond aux arguments qui remplaceront les deux ? présents dans la requête.

La question serait plutôt de savoir pourquoi la requête marche en sql et pas en dql.

Tu peux essayer le debug du DQL généré. Dans ton code, au lieu de faire un exécute, fait un ->getSqlQuery() vers une variable puis un var_dumpt().

Maintenant, je pense à une autre chose, tu fais un execute()... Donc tu récupère un Doctrine_Query et non pas un sfDoctrineRecord. Fais plutôt un ->fechtOne().
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 17h16   #8
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
avec un ->fetchOne voila la nouvelle erreur
Code :
1
2
 
Fatal error: Call to undefined method Doctrine_Query::fechtOne() in C:\wamp\www\hyundailocalad\apps\frontend\modules\connexion\actions\actions.class.php on line 31
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 17h45   #9
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
De la compréhension de son modèle objet...

De l'utilisation d'un bon EDI qui fait de la complétion...

Code php :
1
2
3
$this->user = Doctrine::getTable('Utilisateur')
                          ->getUserByConnexion($this->username,$this->pass)
                          ->fechtOne();
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 17h49   #10
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
j'utilise netBeans et je crois que cote completion , il gère quand même!!
Est ce que mon problme peut être au niveau du schema.yml, je dis ca comme ça atout hasard.
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 09h37   #11
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Netbeans fait correctement l'autocomplétion pour le fechtOne(). Il est impossible qu'il te l'ai proposé là où tu l'as mis.

Regarde le code que je t'ai donné, le fechtOne n'est pas au même endroit dans le code...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h08   #12
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Bonjour,
Je viens de mettre le fetchOne à sa place,
Code :
1
2
3
4
 
$this->user = Doctrine::getTable('Utilisateur')
                          ->getUserByConnexion($this->username,$this->pass)
                          ->fetchOne();
et apparemment je n'ai plus d'erreur , mais seulement dans mon template $user me retourne 2, comment faire pour accéder aux différentes colonnes de l'objet?
Qu'est qu'il fait exactement ce fetchOne??
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h12   #13
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
Bonjour,

Comme Michel le dit, Netbeans fait bien l'autocompletion, mais il aurait du vous sauter aux yeux que le verbe "to fecht" n'existe pas en anglais. On préfèrera utiliser "to fetch".

De fait, "fetchOne" fonctionnera bien mieux et PHP ne devrait plus vous injurier pour ce cas là.

Cdt.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/05/2011, 10h15   #14
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
fetchOne, va vous retourner un objet de type Utilisateur.

Utilisez ensuite les accesseurs de l'objet retourné pour accéder aux différentes propriétés issues de la table.

Par ailleurs, vous devriez ajouter de la phpdoc à votre signature de méthode getUserByConnexion, et notamment y spécifier le type de retour :

Code :
1
2
3
4
5
6
7
8
/**
 * @param string login
 * @param string pwd
 * @return Utilisateur
 */
public getUserByConnexion(....){
}
Par ailleurs, je serais vous, je déporterai l'appel à fetchOne dans la fonction getUserByConnexion.
Cela aurait l'avantage de vous affranchir de l'appel à fetchOne dans le controlleur et vous permettrait de profiter de l'autocompletion de Netbeans qui identifierait bien le type de retour de getUserByConnexion attribué à l'objet affecté en retour de méthode.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/05/2011, 10h46   #15
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
j'ai suivi vos instructions

dans le modele
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
/**
 * @param string login
 * @param string pwd
 * @return Utilisateur
 */
 
    public function getUserByConnexion($username,$password)
    {
        $q = Doctrine_Query::create()
            ->from('Utilisateur u')
            ->where('u.username ="'.$username.'"')
            ->andWhere('u.password ="'.$password.'"')
            ->fetchOne();
        return $q;
    }
l'action
Code :
1
2
3
4
 
$this->user = Doctrine::getTable('Utilisateur')
                          ->getUserByConnexion($this->username,$this->pass)
                          ;
le template
Code :
1
2
 
<?php echo $user;?>
me donne 2 et dans le même template ce script :
Code :
1
2
3
4
 
<?php foreach ($user as $user){?>
    <?php echo $user->getUsername();?>
    <?php }?>
ou tout simplement
Code :
1
2
 
<?php echo $user->getUsername();?>
ça me donne une belle page blanche.

Comment je fais pour acceder aux données de l'objet?
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 11h01   #16
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
fetchOne() retourne un objet sfDoctrineRecord. Soit un enregistrement.

Il n'est donc pas possible de parcourir par un foreach (qui accessoirement ne peut fonctionner avec ta syntaxe).

Le fait d'afficher un sfDoctrineRecord va chercher si, dans ton objet du modèle, tu as définis une méthode _toString(), si oui, il te retournera le résultat. Dans le cas contraire, il retourne l'id de l'enregistrement.

Par contre, il est étonnant que le $user->getUsername() ne retourne rien. Soit le nom n'est pas renseigné (mais alors comment la requête peut-elle le retourner, soit il y a un autre problème !

Essaye dans ton action, juste après avoir récupéré ton user de faire :
Code :
1
2
3
 
var_dump($this->user);
die();
histoire de voir ce qu'il a dans le ventre.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 11h10   #17
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
La page blanche est à priori une erreur 500, c'est à dire le module PHP d'Apache qui se vautre, sur - par exemple - l'appel d'une méthode sur une variable "non objet". Ca peut aussi être simplement que la donnée ne contient rien (à vérifier)...

Dans la première utilisation, le fait d'avoir un résultat (le "2") peut venir de deux sources :
- La première, est que $user est bien un objet, et que la méthode magique __toString() essais de trouver le meilleur candidat à afficher (il essais "id", "lb", et d'autres). Dans ce cas, cela voudrait dire que la méthode getUsername() n'existe pas dans l'objet et c'est facheux. Vérifier du coup que le "2" affiché dans le premier cas n'est pas l'identifiant de votre donnée en base.

- la seconde, est que $user contient en fait une donnée simplement textuelle (id : "2") ou numérique (ie : 2) et que de fait essayer d'y appliquer un appel de méthode est forcément vouée à l'échec.

Tout ça pour dire que vous devriez vous mettre en debug, et que dans la toolbar de symfony, vous devriez trouver quel est le type de la donnée $user dans l'onglet "view".

De là, cela devrait vous donner des pistes.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/05/2011, 11h12   #18
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
je n'ose meme pas vous montrez tout ce qu'il a dans le ventre c'est trooop!!
juste un apercu apres le var_dump:

Code :
1
2
 
object(Utilisateur)#76 (18) { ["_node":protected]=> NULL ["_id":protected]=> array(1) { ["id"]=> string(1) "2" } ["_data":protected]=> array(18) { ["id"]=> string(1) "2" ["username"]=> string(17) "distributeurvichy" ["password"]=> string(32) "27572535ce007aa408d2e145c18e64b0" ["repassword"]=> string(32) "27572535ce007aa408d2e145c18e64b0" ["nom"]=> string(12) "distributeur" ["prenom"]=> string(5) "vichy" ["fonction"]=> string(0) "" ["email"]=> string(15) "test@localad.fr" ["mobile"]=> string(0) "" ["telephone"]=> string(0) "" ["is_active"]=> string(1) "1" ["is_super_admin"]=> string(0) "" ["derniere_connexion"]=> string(0) "" ["ip_connexion"]=> string(9) "127.0.0.1" ["date_creation"]=> string(19) "2011-05-23 00:00:00" ["derniere_modification"]=> string(19) "2011-05-23 00:00:00" ["unite_id"]=> string(1) "5" ["profil_utilisateur_id"]=> string(1) "2" } ["_values":protected]=> array(0) { } ["_state":protected]=> int(3) ["_lastModified":protected]=> array(0) { } ["_modified":protected]=> array(0) { } ["_oldValues":protected]=> array(0) { } ["_errorStack":protected]=> NULL ["_references":protected]=> array(0) { } ["_pendingDeletes":protected]=> array(0) { } ["_pendingUnlinks":protected]=> array(0) { } ["_serializeReferences":protected]=> bool(false) ["_invokedSaveHooks":protected]=> bool(false) ["_oid":"Doctrine_Record":private]=> int(2) ["_table":protected]=> object(UtilisateurTable)#52 (27) { ["_data":protected]=> array(0) { } ["_identifier":protected]=> string(2) "id" ["_identifierType":protected]=> int(1) ["_conn":protected]=> object(Doctrine_Connection_Mysql)#21 (19) { ["driverName":protected]=> string(5) "Mysql" ["dbh":protected]=> object(PDO)#72 (0) { } ["tables":protected]=> array(1) { ["Utilisateur"]=> object(UtilisateurTable)#52 (27) { ["_data":protected]=> array(0) { } ["_identifier":protected]=> string(2) "id" ["_identifierType":protected]=> int(1) ["_conn":protected]=> object(Doctrine_Connection_Mysql)#21 (19) { ["driverName":protected]=> string(5) "M
je perds la tête; juste pour anticiper, le jour ou je ferais une requête ou j'aurais plusieurs objet retourne le fetchOne me sera toujours utile? si oui comment je le parcourrais cette fois la?
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 11h28   #19
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2010
Messages : 76
Points : 161
Points : 161
Comme son nom l'indique, le fetchOne ne récupère qu'une information du type de l'objet demandé (ici Utilisateur).

Si vous souhaitez itérer sur plusieurs enregistrements, il faut alors passer par un execute() qui renverra un Doctrine_Collection d'objets Utilisateur (dans ce cas) et vous pourrez utiliser un foreach.

Concernant votre erreur, il est du coup, étonnant que vous n'ayez rien d'affiché. Le code que vous avez montré correspond-il vraiment à ce que vous avez dans votre code source (controleur, modèle, table et vue) ?
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 12h02   #20
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
le code que je vous ai envoyé est exactement celui qui est sur ce projet.Effectivement le "2" qui est retourne est l'id de l'utilisateur, et quand je change la methode _string() et que je lui demande de me retourne le username , il le fait sans probleme.
Ce qui me gene réellement dans cette histoire.C'est que j'ai plusieurs autres projets où ->execute() me retourne bien l'objet ou les objets demandées.
Je pourrais bien me contenter d'utiliser le fetchOne pour la connexion vu que je ne recherche qu'un seul user.Mais comment je ferais si je veux une collection d'objet.??
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h24.


 
 
 
 
Partenaires

Hébergement Web