在我描述我的問題,它實際上可能更清楚,如果我開始,我發現了錯誤:學說多到許多關係要創建一個表兩次,當我創建一個遷移
$ ./app/console doc:mig:diff
[Doctrine\DBAL\Schema\SchemaException]
The table with name 'user_media_area' already exists.
這是絕對正確的 - user_media_area
確實存在。我在之前的遷移中創建了它,我不明白爲什麼Symfony正在嘗試再次創建表。
我的問題與多對多的關係有關。我有一個名爲user
的表格,名爲media_area
的表格和名爲user_media_area
的表格。
下面的代碼,我告訴user
約media_area
(Entity/User.php
):
/**
* @ORM\ManyToMany(targetEntity="MediaArea", inversedBy="mediaAreas")
* @JoinTable(name="user_media_area",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="media_area_id", referencedColumnName="id")}
* )
*/
private $mediaAreas;
這裏的地方我告訴media_area
約user
(Entity/MediaArea.php
):
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="users")
*/
private $users;
有趣的是,如果我刪除JoinTable
東西從Entity/User.php
,./app/console doctrine:migrations:diff
將再次工作:
/**
* @ORM\ManyToMany(targetEntity="MediaArea", inversedBy="mediaAreas")
*/
private $mediaAreas;
但是,它有點關閉:它現在想創建一個名爲mediaarea
的新表,我不想這樣做。我的桌子已經存在,它叫做media_area
。
所以看起來無論哪種方式,Symfony的是想在我User
類來創建基於此ManyToMany
事情表,唯一的原因,問題就解決了我刪除JoinTable
是表的名稱就是了創建(mediaarea
)不再與我的表的實際名稱(media_area
)匹配。
所以我的問題是:它爲什麼要創建一個新的表?我究竟做錯了什麼?
(我知道這可能是我的命名約定關閉。Symfony和學說的數據庫實例是令人沮喪的缺乏多項列名的,所以我總是不知道如果我應該做的media_area
或mediaArea
。 )
爲什麼這被標記爲答案?它沒有回答OP關於如何停止顯示錯誤的教義的問題。添加後,我得到了Doctrine \ Common \ Annotations \ AnnotationException:[Semantical Error] Annotation @ORM \ Table不允許在屬性User :: $ mediaAreas中聲明。您只能在這些代碼元素上使用這個註釋:CLASS。 – jaycode 2014-01-14 11:34:13
您正試圖在屬性級別放置'@ ORM/Table'註釋,而它應該放在類級別上。錯誤與問題或答案無關。 – 2014-01-14 11:54:53
正確的註釋是@ ORM/JoinTable – luliandro 2014-05-27 14:15:03