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 10/08/2011, 14h42   #1
Invité de passage
 
Inscription : novembre 2004
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 3
Points : 0
Points : 0
Envoyer un message via MSN à FodZy
Par défaut Problème d'accès aux données (BDD)

Bonjour, je viens ici car j'arrive à bout, 3 jours sans réussir à afficher des données...

Mon code dans le controller :
Code :
1
2
3
4
5
6
 
  public function executeIndex(sfWebRequest $request)
  {
  	$dql = "select email LIMIT 3";
  	$this->request = YbNetworknodeTable::getInstance()->findBySql($dql);
  }
Et dans l'affichage :
Code :
1
2
3
4
 
<?php foreach($request as $Rrequest): ?>
Email : <?php echo $Rrequest->getEmail(); ?><br />
<?php endforeach; ?>
J'ai beau faire un print_r() un var_dump() le tableau n'existe pas... aucune variable rien.

Alors que si je fais :
Code :
$this->request = YbNetworknode::getInstance()->findAll();
dans le controller et bien là je reçois le tout donc j'explose la mémoire.

Je suis perplexe.
FodZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 18h08   #2
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 5
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 5
Points : 10
Points : 10
Envoyer un message via Skype™ à Georges59
Bonjour,

Il faudrait que vous passiez en version dev (par ex: frontend_dev.php) afin d'avoir la barre de debug et voir comment est formée la requête SQL générée par le findAll().

Je penche pour une erreur dans votre requête SQL :
Il manque une indication sur la table où effectuer cette requête !

Une requête telle que
Code :
SELECT email FROM nom_de_la_table LIMIT 3
devrait convenir.

Cordialement,
Valentin
Georges59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h17   #3
Invité de passage
 
Inscription : novembre 2004
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 3
Points : 0
Points : 0
Envoyer un message via MSN à FodZy
Merci de votre réponse Georges !

Le soucis c'est que justement le principe d'utiliser Doctrine c'est qu'il n'y a pas besoin de préciser la base plus que justement on passe par le model.

Sur ce code :
Code :
1
2
3
4
5
6
 
public function executeIndex(sfWebRequest $request)
  {
  	$dql = "select email LIMIT 3";
  	$this->request = YbNetworknodeTable::getInstance()->findBySql($dql);
  }
La ligne :
Code :
1
2
 
$this->request = YbNetworknodeTable::getInstance()->findBySql($dql);
YbNetworknode::getInstance() permet déjà de préciser sur qu'elle table on travail.

Mais j'ai tout de même tester n'ayant pas la science infuse
Et je reçois cette erreur si je mets un FROM
Code :
1
2
 
SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row. Failing Query: "SELECT y.inetworknode AS y__inetworknode, y.ilogin AS y__ilogin, y.ipropertycivility AS y__ipropertycivility, y.ipropertygender AS y__ipropertygender, y.lastname AS y__lastname, y.firstname AS y__firstname, y.logicaldeleted AS y__logicaldeleted, y.modificationtimestamp AS y__modificationtimestamp, y.creationuser AS y__creationuser, y.creationdate AS y__creationdate, y.modificationuser AS y__modificationuser, y.modificationdate AS y__modificationdate, y.idmck AS y__idmck, y.ismember AS y__ismember, y.email AS y__email, y.title AS y__title, y.birthdate AS y__birthdate, y.birthplace AS y__birthplace, y.birthzipcode AS y__birthzipcode, y.birthcountry AS y__birthcountry, y.adressplacelabel AS y__adressplacelabel, y.adressstreetnumber AS y__adressstreetnumber, y.adressvoicelabel AS y__adressvoicelabel, y.adresszipcode AS y__adresszipcode, y.adressziplabel AS y__adressziplabel, y.adresscountry AS y__adresscountry, y.xmlphonenumber AS y__xmlphonenumber, y.xmlcellularphonenumber AS y__xmlcellularphonenumber FROM yb_networknode y WHERE (select email FROM `yb_networknode` LIMIT 3)"
Ma requête de base fonctionne c'est surtout que je ne reçois pas l'array dans le view
FodZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h49   #4
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 5
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 5
Points : 10
Points : 10
Envoyer un message via Skype™ à Georges59
Bonjour,

Désolé d'avoir répondu un peu à côté de la plaque, je me rend compte que ça fait un moment que j'ai pas touché Sf en fait ...

Au risque de dire une bêtise de plus, il me semble que Doctrine gère les fonctions de façon assez magique, notamment avec les findBy*

Le problème ne viendrait-il pas de cette fonction ?

Personnellement j'avais plutôt l'habitude d'écrire mes requêtes de façon plus explicite :
Code :
1
2
3
4
5
6
 
Doctrine::getTable('YbNetworknode')
      ->createQuery()
      ->select('email')
      ->limit(3)
      ->execute();
Valentin.
Georges59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 10h57   #5
Invité de passage
 
Inscription : novembre 2004
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 3
Points : 0
Points : 0
Envoyer un message via MSN à FodZy
Le soucis c'est que votre méthode est dépréciée :/

Mais je vais changer le titre de mon sujet !
Car c'est surtout le passage de l'array du controller à la view qui ne fonctionne pas.
FodZy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 13h55   #6
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
ATTENTION !

Il existe deux version de doctrine, la 1.2 et la 2.

La méthode proposée correspond à doctrine 1.2 qui fonctionne avec symfony 1.

La méthode que tu proposes "SELECTE ....." est celle qui fonctionne avec doctrine 2 et Syfmony2.

Ce forum est dédié à doctrine 1.2 sur symfony 1, la réponse me semble donc plus que pertinente. Si tu tournes en Symfony2, le mieux serait de reposer la question dans la salle Symfony2, il n'y a pas de salle pour doctrine 2, pour l'instant.
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h55.


 
 
 
 
Partenaires

Hébergement Web