2012-03-06 136 views
1

我已經嘗試了幾個不同的例子,我在論壇上甚至在官方文檔中發現,但似乎無法理解和使這項工作。學說2.1:基本註釋映射

這很簡單,但我寫的東西不起作用!

所以,我有Category實體和一個Site實體。一類應該有很多網站。這就是它,真的。如何映射它們?

我明白我應該在Category實體有一個字段網站爲一對多的關係,並在Site實體多對一類別字段?

我想最基本的代碼是這樣的:

/** 
* @ORM\OneToMany(targetEntity="Site", mappedBy="category") 
*/ 
protected $sites; 

/** 
* @ORM\ManyToOne(targetEntity="Category") 
*/ 
protected $category; 

這(在Symfony的2)調用時沒有給出錯誤:

app/console doctrine:generate:entities TestSampleBundle\Entity\Category (or Site),但是他說:

Namespace "..." does not contain any mapped entities.

我對教義頗爲陌生,所以請不要侮辱,我同意我可能無法理解這些例子,並且他們可能完美地工作,但即便如此,我需要有人用2句話來解釋這一點,所以我會知道從哪裏開始。我還沒有設法使映射工作。

+0

你介意顯示你的名字空間和使用部分嗎? – Sgoettschkes 2012-03-06 19:35:51

+0

是的,這裏是完整的實體:http://pastebin.com/NvcYKVj9 http://pastebin.com/UT3Zv5Ba我通過嘗試通過Symfony的控制檯生成它們來得到錯誤。 – 2012-03-06 19:38:53

回答

0

看着你的引擎收錄後,我意識到,你可能有你的命名空間的一些問題:

嘗試用

namespace Tony\NachalotoBundle\Entity; 

更換

namespace Tony\NachalotoBundle\Entity\Catalog; 

,並確保其放置在文件夾中

src/Tony/NachalotoBundle/Entity 

作爲一般建議:始終確保您的命名空間與symfony命令中的文件夾結構和用法相匹配。自動加載器只有在注意名稱空間的情況下才能正常工作!

+0

好吧,我的兩個實體都在同一個文件夾/命名空間中,而Doctrine文檔說如果它們在同一個命名空間中,他們可以毫無問題地看到對方。不過,我懷疑我的一代命令可能不正確。 – 2012-03-06 19:47:06

+0

事實上,您在命令中使用名稱空間TestSampleBundle \ Entity \ Category,應該說Tony \ NachalotoBundle \ Entity \ Catalog。請注意,這不是symfony2慣例,它說你應該將你的實體直接放在Tony \ NachalotoBundle \ Entity中。 – Sgoettschkes 2012-03-06 19:49:01

+0

是的,那是問題,我的命令是錯誤的,我也錯過了ManyToOne方面的'inversedBy'。它現在有用,謝謝! – 2012-03-06 19:50:23

0

確保你沒有任何其他的學說聲明格式(yml,xml,...)。

在我的情況下,MyBundle裏面有一個文件../Resources/doctrine/Users.orm.yml,它導致doctrine不讀取Entities定義的註釋。

刪除此文件夾,因爲它不需要導致類用戶通過註釋定義,解決了我的問題。