Doctrine ORM语义查询错误:类没有关联

时间:2017-06-29 13:17:35

标签: symfony doctrine-orm repository-pattern

得到一个有点抽象的错误,存储库和实体关系映射似乎是正确的:

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

Document实体:

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

DocumentVersion实体:

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

似乎所有东西都被正确定义了。导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

同一错误的其他答案提供的关系配置解决方案并不适用于我的情况。相反,在检查app.repository.document_version定义是否正确之后:

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

事实证明,这是DocumentVersion实体类中的存储库关系的配置:

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

操作线:

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

请注意,在上面的行中,它指向错误的存储库。一旦更新为:

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

这解决了这个问题。另外,在Symfony(3.3)中,实际的DQL是在第二个例外中向下滚动屏幕:

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

希望这可以防止有人不必要地转动轮子。 :)