2011-11-10 22 views
8

我試圖使用FOS_UserBundle管理我的用戶,但每次我嘗試更新數據庫Symfony2:FOS_Userbundle更新數據庫架構時的重複定義?

php app/console doctrine:schema:update --force 

我獲得以下錯誤:

欄「用戶名」的重複定義的實體在一個領域或鑑別器列映射。 FOS用戶捆綁

它還與「電子郵件」發生在我註釋掉的用戶名。

我的用戶類其實很簡單:

namespace My\MyBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string", length="100") 
*/ 
protected $username; 

/** 
* @ORM\Column(type="string", length="100") 
*/ 
protected $name; 

/** 
* @ORM\Column(type="string", length="100") 
*/ 
protected $firstname; 

/** 
* @ORM\Column(type="string", length="150") 
*/ 
protected $email; 

} 

我這麼想嗎?

回答

13

您的My\MyBundle\Entity\User延伸FOS\UserBundle\Entity\User,而這又延伸FOS\UserBundle\Model\User,其中已經有一個$username字段。它還有一個$email字段。所以你只需要刪除你班上的$username$email字段。

+0

非常感謝igorw!有些東西似乎沒有爲初學者指出足夠的深度。謝謝! – Mike

+9

但是,如果您需要使用您自己的驗證組將您自己的斷言添加到這些字段,那麼如果您不再擁有自己的用戶類中的屬性,該怎麼辦? – flu

+3

即使我刪除電子郵件或用戶名字段,我也會收到此錯誤。我知道這個問題是老... –

10

與FOS \ UserBundle \型號\用戶,而不是FOS \ UserBundle \實體\ User類擴展。您應該始終使用Model,而不是實體。

+0

這樣做,但爲什麼我不應該擴展實體? – flu

+2

因爲該實體已經「包含」了註釋。通過擴展,你可以做的已經存在的 –

+1

在這種情況下,場自己的註釋模型提防taht你需要重新定義所有註釋(沒有人會從'FOS \ UserBundle \實體\ User'繼承) –

2

對於我來說,它的工作由去除 Column註釋。

/** 
* @ORM\Column --> remove this line! 
*/ 
protected $password; 

您可以使用@ORM \ AttributeOverrides到用戶或BaseUser類從BaseUser覆蓋註解。 例如:

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
* @AttributeOverrides({ 
*  @AttributeOverride(name="password", 
*   [email protected](
*    nullable = false, 
*    unique = true, 
*    length = 123 
*   ) 
*  ) 
* }) 
class User extends BaseUser 
{ 
...