Aunque la herencia en doctrine ofrece grandes posibilidades y en muchos casos nos ahorrará bastante tiempo y código, no viene sin sus particularidades. Una de ellas se presenta cuando queremos definir un índice o una llave foránea en una clase usando atributos de la clase 'madre'. Así, si tenemos un modelo como el siguiente, el índice no funcionará:
Lo más 'gracioso' es que no recibiremos un mensaje de error al construir el modelo y sólo nos daremos cuenta cuando hagamos pruebas. Para que el elemento sea creado correctamente, todos los atributos usados en su definición deben declararse en la clase 'hija'. De tal modo, el ejemplo anterior deberá corregirse así:
ClaseMadre:
connection: doctrine
tableName: clase_madre
columns:
id:
type: integer(4)
primary: true
autoincrement: true
nombre:
type: string(255)
notnull: true
default: false
otro_atributo:
type: string(255)
notnull: true
default: false
ClaseHija:
connection: doctrine
tableName: clase_hija
inheritance:
type: concrete
extends: ClaseMadre
columns:
fecha_creacion:
type: date
notnull: true
indexes:
nombre_fecha_creacion_unique_index:
fields: [nombre, fecha_creacion]
type: unique
Lo más 'gracioso' es que no recibiremos un mensaje de error al construir el modelo y sólo nos daremos cuenta cuando hagamos pruebas. Para que el elemento sea creado correctamente, todos los atributos usados en su definición deben declararse en la clase 'hija'. De tal modo, el ejemplo anterior deberá corregirse así:
ClaseMadre:
connection: doctrine
tableName: clase_madre
columns:
id:
type: integer(4)
primary: true
autoincrement: true
otro_atributo:
type: string(255)
notnull: true
default: false
ClaseHija:
connection: doctrine
tableName: clase_hija
inheritance:
type: concrete
extends: ClaseMadre
columns:
nombre:
type: string(255)
notnull: true
default: false
fecha_creacion:
type: date
notnull: true
indexes:
nombre_fecha_creacion_unique_index:
fields: [nombre, fecha_creacion]
type: unique