2011-11-10 22 views
8

estoy tratando de utilizar el FOS_UserBundle para gestionar mis usuarios, pero cada vez que intento actualizar el PPSymfony2: FOS_Userbundle ¿Definición duplicada al actualizar el esquema db?

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

consigo siguiente error:

Definición de duplicados de la columna 'nombre de usuario' en la entidad en un campo o mapeo de columna de discriminador. paquete de usuario de fos

También ocurre con 'correo electrónico' cuando comento el nombre de usuario.

Mi clase de usuario es en realidad muy básico:

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; 

} 

Me estoy perdiendo algo?

Respuesta

13

Su My\MyBundle\Entity\User extiende FOS\UserBundle\Entity\User, que a su vez se extiende FOS\UserBundle\Model\User, que ya tiene un campo $username. También tiene un campo $email. Por lo tanto, solo necesita eliminar los campos $username y $email de su clase.

+0

Gracias magnifico igorw! .. algunas cosas parecen no ser suficientemente profundas para principiantes ... ¡Gracias! – Mike

+9

Pero si necesita agregar sus propias aserciones a esos campos con sus propios grupos de validación, ¿cómo podría hacerlo si ya no tiene las propiedades en su propia clase de usuario? – flu

+3

Recibo este error incluso si borro los campos de correo electrónico o nombre de usuario. Sé que esta pregunta es antigua ... –

10

Extienda con FOS \ UserBundle \ Model \ User, no FOS \ UserBundle \ Entity \ User class. Siempre debe extenderse con el Modelo, no con la Entidad.

+0

Eso hace el truco, pero ¿por qué no debería extender la entidad? – flu

+2

Porque la entidad ya "contiene" anotaciones. Al extender el modelo, puede hacer sus propias anotaciones en el campo ya existente –

+1

En este caso, tenga cuidado de que necesite redefinir todas las anotaciones (nadie se heredará de 'FOS \ UserBundle \ Entity \ User') –

2

Para mí, funcionó por eliminando la anotación de la columna.

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

Puede utilizar @ORM \ AttributeOverrides a usuario o clase BaseUser para anular las anotaciones de BaseUser. Ejemplo:

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