2017-06-29 3 views
0

Obtenir une erreur quelque peu abstraite, les correspondances du référentiel et la relation entité semblent corrects:Doctrine ORM erreur de requête sémantique: classe n'a aucune association

[Semantical Error] line 0, col 102 near 'v WHERE t.domainName': Error: 
    Class AppBundle\Entity\DocumentVersion has no association named document_versions 

L'entité Document:

/** 
* @var Collection|DocumentVersion[] 
* 
* @ORM\OneToMany(targetEntity=DocumentVersion::class, mappedBy="document") 
**/ 
private $document_versions; 

Le DocumentVersion entité:

/** 
* @var Document 
* 
* @ORM\ManyToOne(targetEntity=\AppBundle\Entity\Document::class, inversedBy="document_versions") 
* @JoinColumn(name="document_id", referencedColumnName="id") 
**/ 
private $document; 

Tout semble être defin ed correctement. Qu'est ce qui cause cette erreur?

+0

Voir que vous avez déjà répondu à votre question. Comme une question secondaire pour vous: pourquoi faites-vous vos propriétés d'entité 'private' au lieu de' protected '? Je rends toujours le mien «protégé» afin de pouvoir les utiliser par héritage. Je me demandais si vous utilisiez 'private' avec une raison spécifique. – Nukeface

+0

J'ai tendance à laisser les choses «privées» jusqu'à ce que je sache que je veux les exposer. –

Répondre

0

D'autres réponses à la même erreur fournissent des solutions de configuration de relation qui n'étaient pas applicables à ma situation. Au lieu de cela, après avoir vérifié que la définition app.repository.document_version était correcte:

app.repository.document_version: 
    class: AppBundle\Repository\DocumentVersionRepository 
    factory: ['@doctrine', getRepository] 
    arguments: ['AppBundle\Entity\DocumentVersion'] 

Il est avéré que c'était la configuration de la relation référentiel dans la classe d'entité DocumentVersion:

/** 
* DocumentVersion 
* 
* @ORM\Table(name="document_version") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\DocumentRepository") 
* @ORM\HasLifecycleCallbacks 
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false) 
*/ 
class DocumentVersion 

Operationnels:

* @ORM\Entity(repositoryClass="AppBundle\Repository\DocumentRepository") 

Notez comment, dans la ligne juste au-dessus, il pointe vers le mauvais référentiel. Une fois qu'il a été mis à jour à:

* @ORM\Entity(repositoryClass="AppBundle\Repository\DocumentVersionRepository") 

Cela a résolu le problème. En outre, dans Symfony (3.3), la DQL réelle, il a été Borking sur était un défilement vers le bas de l'écran dans une deuxième exception:

SELECT d 
FROM AppBundle\Entity\DocumentVersion d 
INNER JOIN d.tenant t 
INNER JOIN d.document_versions v 
WHERE t.domainName = :domain_name 
ORDER BY d.name ASC 

Espérons que cela empêche une personne de tourner leurs roues inutilement. :)