Hola soy nueva en Symfony2. Tengo dudas con respecto a la herencia de clases. Quiero definir una clase padre con tres subclases hijas; ¿cómo se hace esto en Symfony2?
Respuestas
@rut1919 la herencia de entidades en realidad no es responsabilidad de Symfony2 sino de Doctrine. Tal y como se explica en el manual de Doctrine, hay dos tipos principales de herencia. El primero se llama Single Table Inheritance y consiste en que se guardan todas las entidades en una única tabla de la base de datos. El segundo tipo se llama Class Table Inheritance y consiste en que cada tipo de entidad se guarda en una tabla diferente de la base de datos. Por rendimiento y facilidad de programación el primer tipo es el recomendado.
El siguiente ejemplo utiliza la herencia Single Table Inheritance. Para ello, supongamos que tenemos una entidad padre llamada Persona
y tres entidades hijas llamadas Cliente
, Vendedor
y Empleado
. Las entidades que tienes que crear son las siguientes:
<?php namespace Acme\UsuariosBundle\Entity; /** * @Entity * @InheritanceType("SINGLE_TABLE") * @DiscriminatorColumn(name="discr", type="string") * @DiscriminatorMap({"person" = "Person", "client" = "Client", * "salesperson" = "Salesperson", "employee" = "Employee"}) */ class Person { // ... } /** * @Entity */ class Client extends Person { // ... } /** * @Entity */ class Salesperson extends Person { // ... } /** * @Entity */ class Employee extends Person { // ... }
@javiereguiluz
No entiendo por qué lo definís en la entidad de UsuariosBundle/
. Si yo tengo persona y sus hijas, debería ir las declaraciones anteriores en la entidad del padre. ¿Está bien como lo estoy pensando?
Sigue funcionando la persistencia de los datos, al hacer single_table
. Si yo quiero solamente listar datos de una de las clases, ¿eso funciona bien igual? Gracias por responderme.
@rut1919