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 05/11/2011, 23h07   #1
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Par défaut Sous Requête SQL sous Symfony

Bonjour.

Je suis en train de créer un site web entre amis sur le pronostic de match de football (de ligue 1 essentiellement).

J'ai crée mon MCD et j'ai le MPD ci dessous.



Equipe :
equipe_id : identifiant (clé primaire)
equipe_lib : Libellé de l'équipe
equipe_val : booléen pour savoir si l'équipe est bien en ligue 1
equipe_logo : adresse url du logo de l'équipe

Matchs :
matchs_id : identifiant (clé primaire)
equipe_id_dom : clé étrangère de l'équipe qui joue a domicile
equipe_id_ext : clé étrangère de l'équipe qui joue a l'extérieur
matchs_journee : numéro de la journée
matchs_date : date du matchs
matchs_report : booléen pour savoir si le match est reporté

Resultat:
resultat_id : identifiant (clé primaire)
matchs_id : clé étrangère du matchs
resultat_but_ext : nombre de but de l'équipe qui joue a l'extérieur
resultat_but_dom : nombre de but de l'équipe qui joue a domicile

Je souhaite faire le "calendrier" des matchs, avec en prime, le resultat du match quand celui ci est déjà joué.
J'ai donc fait ma requête d'abord sous MySql, elle marche parfaitement.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
select 
 
(select resultat_but_dom from resultat where resultat.matchs_id = matchs.matchs_id) as but_dom,
 
(select resultat_but_ext from resultat where resultat.matchs_id = matchs.matchs_id) as but_ext,
 
(select equipe_lib from equipe where equipe.equipe_id = matchs.equipe_id_dom) as equipe_dom, 
 
(select equipe_lib from equipe where equipe.equipe_id = matchs.equipe_id_ext) as equipe_ext,
 
(select equipe_logo from equipe where equipe.equipe_id = matchs.equipe_id_dom) as logo_dom,
 
(select equipe_logo from equipe where equipe.equipe_id = matchs.equipe_id_ext) as logo_ext,
 
matchs_journee,matchs_date
 
from matchs
Sous Symfony cela me donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    	$q = $this->createQuery('l')
    	->select ('(select resultat_but_dom from resultat where resultat.matchs_id = matchs_id) as but_dom,
 
				   (select resultat_but_ext from resultat where resultat.matchs_id = matchs_id) as but_ext,
 
				   (select equipe_lib from equipe where equipe.equipe_id = equipe_id_dom) as equipe_dom, 
 
				   (select equipe_lib from equipe where equipe.equipe_id = equipe_id_ext) as equipe_ext,
 
				   (select equipe_logo from equipe where equipe.equipe_id = equipe_id_dom) as logo_dom,
 
				   (select equipe_logo from equipe where equipe.equipe_id = equipe_id_ext) as logo_ext,
 
			       matchs_journee,matchs_date')
    	->from('Matchs');
 
    	return $q->execute();
Le problème est que j'ai le droit a un message d'erreur

Citation:
SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row. Failing Query: "SELECT m.matchs_id AS m__matchs_id, m.matchs_journee AS m__matchs_journee, m.matchs_date AS m__matchs_date, (select resultat_but_dom from resultat where r.matchs_id = m.matchs_id) AS m__0, (select resultat_but_ext from resultat where r.matchs_id = m.matchs_id) AS m__1, (select equipe_lib from equipe where e.equipe_id = m.equipe_id_dom) AS m__2, (select equipe_lib from equipe where e.equipe_id = m.equipe_id_ext) AS m__3, (select equipe_logo from equipe where e.equipe_id = m.equipe_id_dom) AS m__4, (select equipe_logo from equipe where e.equipe_id = m.equipe_id_ext) AS m__5 FROM matchs m, resultat r, equipe e"
Je comprend le message d'erreur, aucun soucis, le seul problème est pour résoudre le problème. Je ne comprend pas pourquoi dans mon FROM de ma requête principale, symfony me redescend mes tables Resultat et Equipe ?

PS : Je sais table Matchs sans S c'est mieux, mais c'est fait voulus avec un S.
micky86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 11h17   #2
Candidat au titre de Membre du Club
 
Homme John
Développeur informatique
Inscription : avril 2008
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme John
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2008
Messages : 18
Points : 10
Points : 10
Je ne suis pas expert mais quand tu fais $this->createQuery('l') sa ne fait pas déjà un ->from('Matchs'); vu qu'il réutilise l'instance?

Voilà un exemple de requête équivalente :
Citation:
Create New Query

Create new query from Doctrine_Table instance.

$q = Doctrine::getTable('User')->createQuery('u')
->where('u.username = ?', 'jwage');

Create new query manually

$q = Doctrine_Query::create()
->from('User u')
->where('u.username = ?', 'jwage');
ctek59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 12h31   #3
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 40
Points : 23
Points : 23
Autant pour moi, je n'ai pas besoin d'inclure résultat dans ma requete sql puisque c'est une relation 1,1...
micky86 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 16h46.


 
 
 
 
Partenaires

Hébergement Web