Hola, estoy viendo el código de FOSUserBundle para aprender cosas. Me entra la duda a la hora de ver sus entidades y el crear tu propia entidad User
, de la manera que está, ¿cómo hacen para que no se te cree la tabla de su propia entidad?
Ya que estás diciendo en el bundle una y luego en tu bundle otra, que extiende de esa pero ¿cómo sabe Symfony, o quien sea, que no debe hacerlo, que sólo debe crear la tabla de tu entidad?
Saludos
Respuestas
La respuesta es más sencilla de lo que puede parecer al principio. Fíjate en el posible código de tu clase propia User
:
/** * @ORM\Entity * @ORM\Table(name="fos_user") */ class User extends BaseUser {
Esta clase solamente dice que hereda de BaseUser
y configura un par de anotaciones. Al extender de una clase, sus comentarios no se heredan, por lo que sus anotaciones no se heredan.
En otras palabras, si usas la clase base que te proporciona el bundle, entonces el nombre de la tabla es el que indique la anotación @ORM\Table
de esa clase. Si utilizas tu propia clase de usuario, se heredan todos los campos de la clase base pero a la vez, se usan tus anotaciones y por tanto, tu nombre de tabla.
Otra cosa muy distinta sería si tu clase User
hereda de la otra a nivel de Doctrine (anotación @InheritanceType
) y no sólo a nivel de PHP (palabra reservada extends
).
@javiereguiluz
Hola Javier, si pero no lo pillo jaja, a ver yo estoy intentando hacer algo parecido, pero en mi caso me crea dos tablas, en el ejemplo de FOSUserBundle
tiene la entidad de la que extiende BaseUser
y esta la tuya User
, pero al generar la base de datos solo te crea la tuya, la tabla que corresponde a BaseUser
no.
Te pongo mi ejemplo, tengo un bundle NotificationBundle
, este dispone de una interface NotificationInterface
y una clase abstracta NotificationAbstract
, la clase abstracta implementa la NotificationInterface
, y luego tengo una entidad llamada Notification
que extiende NotificationAbstract
.
Ahora quiero tener un bundle y en ella crear mi propia clase que extienda de la entidad de mi bundle NotificationBundle
, o sea, tengo mi bundle PruebasBundle
y en el creo una entidad llamada MyNotification
y esta extiende de NotificationBundle:Notification
Creo que es así como hacen en FOSUserBundle o FOSCommentBundle, pero a ellos no le genera dos tablas, y en mi caso me genera una Notification
y otra MyNotification
.
@AlbertoVioque
Vale no me había parado a ver lo que me decías de:
Otra cosa muy distinta sería si tu clase User hereda de la otra a nivel de Doctrine (anotación @InheritanceType) y no sólo a nivel de PHP (palabra reservada extends).
Poniendo esto type: mappedSuperclass
en la clase Notification
sólo crea la entidad que creo en el bundle de pruebas.
@AlbertoVioque