2011-11-10 12 views
8

Próbuję użyć FOS_UserBundle do zarządzania moich użytkowników, ale za każdym razem staram się aktualizować dbSymfony2: FOS_Userbundle Zduplikowana definicja podczas aktualizowania schematu db?

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

mi się następujący błąd:

Duplikat definicja kolumnie „nazwa użytkownika” na podmiot w polu lub mapowanie kolumny dyskryminacyjnej. pakiet użytkownika fos

Zdarza się również z "e-mailem", gdy skomentuję nazwę użytkownika.

Moja klasa użytkownik jest w rzeczywistości bardzo proste:

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; 

} 

Am I czegoś brakuje?

Odpowiedz

13

Twój My\MyBundle\Entity\User rozszerza , który z kolei rozszerza FOS\UserBundle\Model\User, który ma już pole $username. Ma również pole $email. Musisz więc usunąć pola $username i $email ze swojej klasy.

+0

Wielkie dzięki, igorw! .. niektóre rzeczy wydają się nie być wystarczająco głęboko wskazane dla początkujących .. Dzięki! – Mike

+9

Ale jeśli chcesz dodać własne potwierdzenia do tych pól z własnymi grupami walidacji, jak możesz to zrobić, jeśli nie masz już właściwości w swojej własnej klasie użytkownika? – flu

+3

Otrzymuję ten błąd, nawet jeśli usuwam pola adresu e-mail lub nazwy użytkownika. Wiem, że to pytanie jest stare ... –

10

Rozszerz z FOS \ UserBundle \ Model \ User, nie FOS \ UserBundle \ Entity \ User class. Powinieneś zawsze rozszerzyć model, a nie Entity.

+0

To działa, ale dlaczego nie powinienem rozszerzyć Entity? – flu

+2

Ponieważ podmiot już "zawiera" adnotacje. Rozszerzając model, możesz tworzyć własne adnotacje na istniejącym już polu –

+1

. W tym przypadku pamiętaj, że musisz ponownie zdefiniować wszystkie adnotacje (nikt nie będzie dziedziczony po 'FOS \ UserBundle \ Entity \ User') –

2

Dla mnie zadziałało usunięcie adnotacji kolumny.

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

Można użyć @ORM \ AttributeOverrides do Użytkownika lub klasy BaseUser przesłonić adnotacji z BaseUser. Przykład:

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