|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
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 :
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 :
Code :
j'ai cette erreur que je ne comprend pas: Code :
Si quelqu'un peut m'aider je suis preneur!!! Merci. |
||||||||
|
|
00
|
|
|
#2 | ||
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Code :
|
||
|
|
10
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
On avance déjà mais on est encore loin!!
Il me retourne ce resultat: Code :
|
||
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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 ???? 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).
|
|
00
|
|
|
#5 | ||||||||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
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 :
Code :
Code :
Code :
Code :
|
||||||||||
|
|
00
|
|
|
#6 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
En fait quand je regarde la commande sql qui est donnée dans le fichier de log
Code :
Mais la question est de savoir comment faire pour l'enlever depuis la requête doctrine |
||
|
|
00
|
|
|
#7 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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).
|
|
00
|
|
|
#8 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
avec un ->fetchOne voila la nouvelle erreur
Code :
|
||
|
|
00
|
|
|
#9 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
De la compréhension de son modèle objet...
De l'utilisation d'un bon EDI qui fait de la complétion... Code php :
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
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. |
|
|
00
|
|
|
#11 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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).
|
|
00
|
|
|
#12 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
Bonjour,
Je viens de mettre le fetchOne à sa place, Code :
Qu'est qu'il fait exactement ce fetchOne?? |
||
|
|
00
|
|
|
#13 |
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
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. |
|
|
01
|
|
|
#14 | ||
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
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 :
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. |
||
|
|
10
|
|
|
#15 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
j'ai suivi vos instructions
dans le modele Code :
Code :
me donne 2 et dans le même template ce script : Code :
ça me donne une belle page blanche. Comment je fais pour acceder aux données de l'objet? |
||||||
|
|
00
|
|
|
#16 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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 :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).
|
|
00
|
|
|
#17 |
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
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. |
|
|
10
|
|
|
#18 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
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 :
|
||
|
|
00
|
|
|
#19 |
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
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) ? |
|
|
00
|
|
|
#20 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2010 Messages : 77 ![]() |
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.?? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com