2017-06-29 48 views
0

獲得一個比較抽象的錯誤,倉庫和實體關係映射似乎是正確的:學說ORM語義查詢錯誤:類沒有關聯

[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

看到你已經回答了你的問題。作爲你的一個側面問題:爲什麼你讓你的實體屬性爲private而不是protected?我總是讓我的'保護',以便能夠通過繼承使用它們。想知道你是否以特定的原因使用了「private」。 – Nukeface

+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),它是borking實際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 

希望這不斷有人從不必要的紡輪。 :)