|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 11 ![]() |
Bonjour,
J'essaie de traduire en DQL une requête assez simple avec un innerJoin : Code :
La requête fait appel à deux tables. Voici la partie du schéma.yml correspondante : Code :
Ma requête : Code :
Quelqu'un pourrait-il me donner l'équivalent DQL de cette requête, que je comprenne mieux comment cela fonctionne ? Merci d'avance, bye. |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
La méthode innerJoin() en DQL ne permet que d'utiliser les relations définies dans le modèle, d'où le message d'erreur retourné.
Dans ton cas, il faut tout définir dans le from().
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 | ||||||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 11 ![]() |
Pour relier les deux tables (objetsechange et annonces) j'ai rajouté la liaison dans ma BDD :
Code :
Annonces : Code :
Code :
(Sinon, que voulais tu dire par "tout définir dans le from()" ?) |
||||||
|
|
00
|
|
|
#4 | ||||||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Bon... reprenons.
Il est possible de définir des relations "sauvage" (pas définies dans le schéma) soit en les déclarant dans le from (avec un inner join on ) soit en déclarant les tables dans le form et la relation dans un where ou un andWhere. Ceci doit être strictement limités aux relations qui sont totalement étrangère au schéma et réellement exceptionnelles. Pour les autres... il convient au préalable de définir un schéma viable. Il existe deux méthodes pour définir le modèle objet de doctrine et la structure de la base de données, celle que tu utilises : définir la structure et en déduire un modèle et l'autre : définir un modèle et en déduire la structure. La seule bonne méthode est la deuxième, la première ne doit être utilisée que s'il n'est réellement pas possible d'envisager de faire autrement et, en réalité, il convient alors de jouer avec le shema pour coller au mieux à un modèle objet viable sans que la structure de la base de données (qui ne pourrait être modifiée dans ce cas) ne soit impacté. En partant de là et en fonction de ce que tu dis, je déduit que ton application est toute neuve, pas sèche pour un clou et que l'idéal est la seul bonne méthode : création d'un shema.yml qui va générer une base de données. Ceci va nous permettre d'avoir un modèle objet utilisable au mieux avec doctrine et pas de problèmes dans les relations entre les tables, ce qui, indirectement, va résoudre ton problème. Ton schéma réadapté pourrait donner un truc dans le genre : Code :
Code php :
On peut depuis $data récupérer les donnés des ObjetEchange par $data->getObjetEchanges() qui retourne un Doctrine_Collection. Le template qui permettrait d'afficher le nom de Annonce et le nom des ObjetEchange (pour peu qu'un champ name soit défini sur ces deux objets du modèle) donnerait plus ou moins : Code html :
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||||||
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 11 ![]() |
Tout d'abord merci pour le temps que tu prends à me répondre, c'est vraiment cool de ta part
![]() Malheureusement, je ne travaille pas sur un nouveau projet mais sur un site qui était entièrement codé en PHP procédurale. Celui-ci possède donc déjà une BDD mais qui est éventuellement modifiable cependant il n'est pas question de la recréer entièrement depuis un nouveau yml. Le système d'annonces et d'objets échangés ne fonctionnent pas exactement comme tu l'as mis (mais c'est normal tu n'as pas les yeux sur le projet !) En fait la relation ne s'effectue pas entre l'id de objetsEchange et l'id de Annonces mais entre idAnnonceEchange (qui est un autre id présent dans objetsEchange) et idAnnonce (dans Annonces). Une annonce possède UN SEUL objet échangé. Bref, je suis entrain de remodeler la BDD afin de pouvoir créer un YML viable, je vous tiens au courant. |
|
|
00
|
|
|
#6 | ||||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 11 ![]() |
J'ai finalement réussi
J'ai ajouté dans mon schema.yml à ObjetsEchange Code :
Code :
Cependant j'ai une dernière question : Si je me rends compte à la moitié de mon projet que j'ai oublié une relation dans ma BDD et donc dans mon schéma, est-il possible de ne régénérer qu'une partie des models ? car "symfony doctrine:build-model' les recrée tous, non ? |
||||
|
|
00
|
|
|
#7 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Dans ton schema type: one est soit de trop, soit un peu seul, dans le cadre d'une relation 1-n, il ne sert à rien vu qu'il est valeur par défaut, il devrait être complété dans ce cas par un foreignType: many mais ces deux arguments n'ont d'intérêt que dans le cadre d'une relation 1-1. En effet, les relations n-n ont des déclarations particulières.
Notes que dans mon exemple, le foreignAlias est "ObjetEchanges", avec un "s" pour indiquer un retour d'un Doctrine_Collection. Dans le cas où tu ne peux pas changer la structure de la base de données, il convient alors d'aménager au mieux le shema.yml pour qu'il colle à la base existante tout en te donnant un modèle exploitable. Tu peux même renommer les champs pour que tes propriétés colles. Tu peux spécifier les modèles a régénéré, mais ceci ne présente aucun intérêt, tu as tout avantage à régénérer la totalité du modèle à chaque opération.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
je me permet de rebondir, malgré plusieurs tentatives, je n'ai jamais réussi à créer une relation qui n'était pas explicite dans le schéma.
|
|
|
00
|
|
|
#9 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu as un exemple avec un bout de shema.yml ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
ma dernière tentative: http://www.developpez.net/forums/d10...lation-schema/
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com