Estaba mirando somequestions que pregunta cómo hacer uniones en las consultas de Zend Framework, pero la respuesta es siempre algo así como "solo haz setIntegrityCheck(FALSE)
".setIntegrityCheck en Zend Selecciona con une
Mi pregunta es: ¿Por qué necesito hacer esto?
Me parece incapacitante "comprobaciones de integridad" no es la forma correcta de hacer este trabajo. En mi caso particular, estoy usando una base de datos MySQL con algunas tablas InnoDB con claves externas, así por ejemplo:
CREATE TABLE IF NOT EXISTS `tableA`
(
`id` CHAR(6),
`name` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `tableB`
(
`tableA_id` CHAR(6),
`somefield` VARCHAR(255),
PRIMARY KEY (`tableA_id`)
) ENGINE=InnoDB;
ALTER TABLE `tableB` ADD FOREIGN KEY fk1 (`tableA_id`) REFERENCES `tableA` (`id`);
(esta es una versión muy simplificada de mi DB)
Y, mi consulta código es el siguiente:
$table = new Zend_Db_Table('tableB');
$select = $table->select(TRUE)
->join(array('a' => 'tableA'), 'tableB.tableA_id = a.id');
$result = $table->fetchAll($select);
esto me está dando la "consulta de selección no puede unirse con otra mesa" excepción a menos que añado el setIntegrity(FALSE)
a mi $select
.
Sí, eso funciona, pero como ha señalado, no puede obtener ninguno de los datos de las tablas combinadas en su conjunto de resultados. Como los datos aún SON de la tabla principal, entonces no ha violado la integridad del resultado, "todos sus datos pertenecen a la tabla principal". Sin embargo, es útil si solo desea obtener filas que tengan la clave externa de la tabla A. Gracias por señalarlo. – drew010
con comprobación de integridad deshabilitada. Pude recuperar de tablas primarias y combinadas. Gracias por la información @cambraca – Varshaan