得到一个有点抽象的错误,存储库和实体关系映射似乎是正确的:
[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;
似乎所有东西都被正确定义了。导致此错误的原因是什么?
答案 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
希望这可以防止有人不必要地转动轮子。 :)