Estoy experimentando con el ORM de Doctrine (v1.2) para PHP. Definí una clase "licor", con dos clases de niños "gin" y "whisky". Estoy usando la herencia concreta (herencia de tabla de clase en la mayoría de la literatura) para mapear las clases en tres tablas separadas de la base de datos.PHP doctrine 1.2 ORM - consultas polimórficas con herencia de tabla de clases
Estoy intentando ejecutar lo siguiente:
$liquor_table = Doctrine_Core::getTable('liquor');
$liquors = $liquor_table->findAll();
Inicialmente, esperaba $ licores para ser un Doctrine_Collection que contiene todos los licores, ya se trate de whisky o ginebra. Pero cuando ejecuto el código, obtengo una colección vacía, a pesar de tener varias filas en las tablas de base de datos de whisky y gin. Basado en el SQL generado, entiendo por qué: el ORM está consultando la tabla de "licor", y no las tablas de whisky/gin donde se almacenan los datos reales.
Tenga en cuenta que el código funciona perfectamente cuando cambio el tipo de herencia a la agregación de columnas (herencia simple de tablas).
¿Cuál es la mejor manera de obtener una Doctrine_Collection que contenga todos los licores?
actualización
Después de algunas investigaciones más, parece que estoy esperando a ser Doctrina realizando una operación de SQL UNION
entre bastidores para combinar los conjuntos de resultados de las tablas "ginebra" "whisky" y.
Esto se conoce como consulta polimórfica.
De acuerdo con this ticket, esta funcionalidad no está disponible en Doctrine 1.x. Está destinado para la versión 2.0. (también vea Doctrine 2.0 docs para CTI).
Por lo tanto, a la luz de esta información, ¿cuál sería la forma más limpia y eficiente de evitar esta deficiencia? ¿Cambiar a herencia de tabla única? ¿Realiza dos consultas DQL y fusiona manualmente las Doctrine_Collections resultantes?