我正在研究一些 问题,询问如何在Zend Framework查询中进行连接,但答案总是像"只做setIntegrityCheck(FALSE)".
我的问题是:为什么我需要这样做?
在我看来,禁用"完整性检查"并不是使这项工作正常的方法.在我的特定情况下,我正在使用带有外键的一些InnoDB表的MySQL数据库,例如:
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`);
Run Code Online (Sandbox Code Playgroud)
(这是我的数据库的一个非常简化的版本)
而且,我的查询代码如下所示:
$table = new Zend_Db_Table('tableB');
$select = $table->select(TRUE)
->join(array('a' => 'tableA'), 'tableB.tableA_id = a.id');
$result = $table->fetchAll($select);
Run Code Online (Sandbox Code Playgroud)
这给了我"选择查询无法与另一个表连接"异常,除非我添加setIntegrity(FALSE)到我的$select.