2011-11-10 17 views
8

benim kullanıcıları yönetmek için FOS_UserBundle kullanmaya çalışıyorum ama her şeySymfony2: FOS_Userbundle Db şemasını güncellerken yinelenen tanım?

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

ben hata aşağıdaki almak dB güncellemeyi deneyin:

bir tarlada varlık üzerinde sütun 'kullanıcı adı' ve Yinelenen tanımı ya da ayrımcı sütun haritalama. fos kullanıcı paketi

Kullanıcı adı hakkında yorum yaptığımda 'e-posta' ile de olur.

Benim kullanıcı sınıfı aslında çok basit:

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; 

} 

mıyım şey eksik? Sizin My\MyBundle\Entity\User

cevap

13

sırayla zaten $username alan vardır FOS\UserBundle\Model\User, uzanır FOS\UserBundle\Entity\User, uzanır. Ayrıca bir $email alanına sahiptir. Bu nedenle, sınıfınızdan $username ve $email alanlarını kaldırmanız yeterlidir.

+0

Harika teşekkürler igorw! .. bazı şeyler sadece yeni başlayanlar için yeterince derinlemesine işaret değil gibi görünüyor .. Teşekkürler! – Mike

+9

Ancak, kendi doğrulama gruplarınızla bu alanlara kendi iddialarınızı eklemeniz gerekiyorsa, artık kendi kullanıcı sınıfınızda özellikleriniz yoksa bunu nasıl yapabilirsiniz? – flu

+3

E-posta veya kullanıcı adı alanlarını sildiğim halde bile bu hatayı alıyorum. Bu sorunun eski olduğunu biliyorum ... –

10

FOS \ UserBundle \ Model \ User ile genişlet, FOS \ UserBundle \ Entity \ User sınıfı değil. Her zaman Model ile değil, Entity ile genişletmelisiniz.

+0

Bu hile yapar, ancak Neden Varlığı genişletmemeliyim? – flu

+2

Zaten varlık zaten "içerme" ek açıklamaları. Modeli genişleterek, halihazırda mevcut olan alan üzerinde kendi ek açıklamalarınızı yapabilirsiniz –

+1

Bu durumda, tüm ek açıklamaları yeniden tanımlamanız gerektiğine dikkat edin (kimse FOS \ UserBundle \ Entity \ User'dan devralınmayacak) –

2

Benim için , Sütun ek açıklamasını kaldırarak çalıştı.

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

Sen BaseUser ek notların geçersiz kılmak için Kullanıcı veya BaseUser sınıfına @ORM \ AttributeOverrides kullanabilirsiniz. Örnek:

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