|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 2 ![]() |
Bonjour à tous,
J'essaie de traduire une requête SQL à base de Inner Join avec Doctrine mais j'ai invariablement une erreur. Ma requête SQL fonctionne, mais pas sa transposition via Doctrine. Pour être plus précis, voici le schéma qui m'a permis de générer la DB : Code :
Je cherche à récupérer tous les DIU d'une spécialité ; ma requête SQL est donc celle-ci : Code :
En revanche j'ai plus de mal pour la traduction avec Doctrine... Voici ma requête : Code :
500 | Internal Server Error | Doctrine_Table_Exception Unknown relation alias avec entre autres les détails suivants : Code :
J'aurais donc plusieurs questions - Que dois-je changer dans ma requête Doctrine pour qu'elle fonctionne comme ma requête SQL ? - Est-ce un bon moyen de procéder pour effectuer cette requête ou y a t-il un moyen plus simple/efficace de faire (compte-tenue de ma relation n-n entre les 2 tables avec une table intermédiaire) ? Merci d'avance pour vos réponses |
||||||||
|
|
00
|
|
|
#2 | ||||||
|
Membre du Club
![]() Analyse système Inscription : mars 2011 Messages : 406 ![]() |
essaye de redéfinir les relation dans tes Class (le dossier lib/doctrine/Diu.class.php) + les autre class de relation :
par exemple : Code :
Code :
Code :
|
||||||
|
|
01
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 2 ![]() |
Merci pour ta réponse benhsaien.
Cependant je ne pense pas que cela change grand chose puisque toutes ces relations ont déjà été définies dans les classes du dossier lib/model/doctrine/base/, générées automatiquement à partir du schema. Finalement en continuant mes recherches, je suis tombé sur ce post : http://groups.google.com/group/doctr...17c25024?fwc=1, et j'ai donc adapté la requête DQL de la sorte : Code :
La requête SQL correspondante effectuée est la suivante : Code :
Donc Doctrine effectue les jointures tout seul, sûrement en se basant sur les relations définies dans le schema. C'est donc beaucoup plus simple que ce que je pensais... même si ça semble un peu "magique" Cependant quelqu'un saurait-il m'expliquer pourquoi ma traduction DQL de la requête SQL ne fonctionnait pas ? Je me dis "si ça marche en SQL, a fortiori ça devrait marcher en DQL"... |
||||
|
|
00
|
|
|
#4 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ton schéma est presque bon, il ne faut en aucun cas aller modifier les relations générées dans les classes... très mauvaise idée.
Tu peux réécrire la relation de la table Specialiste en supprimant les paramètres : local et foreign qui ne sont pas utilisé dans le cas d'une refClasse. En fait, ta requête en DQL est encore plus simple que ce que tu écris. Code php :
La méthode innerJoin() n'est pas le pendant exacte de la commande INNER JOIN du SQL. Sa syntaxe n'est donc pas équivalente. Ta deuxième écriture aurait pu coller dans des innerJoin(). Effectivement, Doctrine se sert de ta description du modèle, si non, pourquoi s’embêter à la faire ? L'objectif du DQL est de permettre de simplifier l'écriture d'une requête, pas de singer le SQL, si non, le PDO suffirait amplement.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
Copyright © 2000-2012 - www.developpez.com