Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Herencia de entidades Symfony 2

17 de enero de 2014

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

#1

@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

20 enero 2014, 22:58
#2

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

23 enero 2014, 21:13