Я смотрел несколько questions, которые спрашивали, как выполнять объединения в запросах Zend Framework, но ответ всегда что-то вроде "просто do setIntegrityCheck(FALSE)
".
Мой вопрос: зачем мне это нужно?
Мне кажется, что отключение "проверки целостности" не является надлежащим способом выполнения этой работы. В моем конкретном случае я использую базу данных MySQL с некоторыми таблицами InnoDB с внешними ключами, например, например:
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`);
(это очень упрощенная версия моей БД)
И мой код запроса выглядит так:
$table = new Zend_Db_Table('tableB');
$select = $table->select(TRUE)
->join(array('a' => 'tableA'), 'tableB.tableA_id = a.id');
$result = $table->fetchAll($select);
Это дает мне исключение "Выбрать запрос не может присоединиться к другой таблице", если я не добавлю setIntegrity(FALSE)
к моему $select
.