Générateur de requêtes / DQL de ne pas travailler avec INNER JOIN - Syntaxe Problème
Je sais que j'ai une syntaxe isse ici, cependant je ne peux pas le comprendre. Je suis en train de faire une sélection et d'une JOINTURE INTERNE de 5 tables mais Symfony est de se plaindre sur les Entités de la JOINTURE sont utilisés avant d'être défini.
Erreur réelle est comme suit: [Semantical Error] line 0, col 121 near 'I ON C.id = ': Error: Identification Variable MySiteBundle:Items used in join path expression but was not defined before.
Voici le code PHP.
Remarque: j'ai raccourcie cette requête à deux colonnes, deux tables, l'une se joindre à garder la question simple et de montrer mon point de vue. La requête réelle est beaucoup plus et est produit la même erreur.
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery(
'select C.name as CName, I.id as IId
FROM MySiteBundle:Categories C
INNER JOIN MySiteBundle:Items I ON C.id = I.category_id');
$result = $query->getResult();
Mise à jour
Comme l'a suggéré, j'ai fait disparaître le DQL code, et j'en utilisant le Générateur de Requêtes de code. Je suis un très similaire d'erreur qui dit 'Categories c': Error: Class 'Categories' is not defined
. Mon QB code est ci-dessous.
$em = $this->getDoctrine()->getEntityManager();
$qb = $em->createQueryBuilder()
->select('c.name, i.id, i.image, i.name, i.description, m.id, m.quantity, m.value, m.qty_received, m.custom_image, m.custom_name, m.custom_description, u.user1fname, u.user1lname, u.user2fname, u.user2lname')
->from('Categories', 'c')
->innerJoin('Items', 'i', 'ON', 'c.id = i.category_id')
->innerJoin('MemberItems', 'm', 'ON', 'i.id = m.item_id')
->innerJoin('User', 'u', 'ON', 'm.memberinfo_id = u.id')
->where('u.id = ?', $slug)
->orderBy('c.id', 'ASC')
->getQuery();
$memberItems = $qb->getResult();
Des suggestions?
OriginalL'auteur ElasticThoughts | 2012-02-22
Vous devez vous connecter pour publier un commentaire.
Louis posté pendant que j'etais en train de taper. Oh bien.
DQL prend soin de le rejoindre détails pour vous en fonction de vos associations. En général, vous avez seulement besoin d'épeler le nom de la classe. Quelque chose comme:
Et définitivement utiliser le générateur de requêtes.
=============================================================================
Voici un exemple de l'utilisation du générateur de requêtes dans Symfony 2.
'Categories' is not defined.
j'ai posté le plein QB requête dans ma question initiale.Je déteste le dire, mais vous avez vraiment besoin de lire le chapitre sur les requêtes: docs.doctrine-project.org/projects/doctrine-orm/en/2.1/... Ensuite, commencer avec une simple requête avec pas de joint et de le compléter. Ajouter une symfony2 de commande de sorte que vous pouvez le tester en ligne de commande. Si vous avez encore des problèmes, puis poster vos mises à jour de la requête.
OriginalL'auteur Cerad
DQL ne pas utiliser les jointures comme ça. Ils sont un peu simplifié. Cependant, je trouve aussi à être sous-documenté.
La réelle relation utilisée dépend de votre modèle.
J'ai l'habitude d'utiliser le générateur de requête.
Oui, vous êtes toujours en insistant sur la définition de la condition de jointure. Vous n'avez pas besoin de le faire. Doctrine se comprendre, à partir de votre modèle. Vérifiez la façon dont ma requête est écrite. Fournir des détails au sujet de votre modèle si vous avez encore des problèmes.
Vous êtes dit que la Doctrine de levier sur les relations au sein de la classe d'Entité pour déterminer comment faire la jointure. Le problème c'est que cette DB schéma a été créé par quelqu'un d'autre et non pas toutes les relations existent. Quand j'ajoute de ces relations dans la base de données et mettre à jour les classes d'entité-je interrompre le site. Je reçois plusieurs intégrité des erreurs de violation de contrainte sur plusieurs pages. Réécrire/corriger ces pages n'est pas une option à ce stade, je ne peux donc pas l'effet de levier de l'Entité relations de classe à ce moment. C'est pourquoi je vais essayer d'identifier explicitement les tables/colonnes dans la jointure. Des Suggestions??
Partielle du code de la propriété ne peut pas être bon. Ne pouvez-vous pas obtenir les relations ajouté dans le modèle? Sinon, vous pourriez avoir à revenir à SQL. Je n'ai jamais été bloqué dans cette situation, je peux 't aider beaucoup plus loin.
Entendu, merci pour l'aide jusqu'à ce point!
OriginalL'auteur Louis-Philippe Huberdeau
Vous pourriez avoir à vérifier vos annotations ou fichier yml pour assurez-vous d'avoir votre cartographie de l'installation correctement pour OneToMany, ManyToMany, et ManyToOne.
Dans votre MemberItems Contrôleur ou MemberItems Référentiel de mettre ceci:
OriginalL'auteur intrepion