zend-framework – Zend中的setIntegrityCheck选择连接
我正在查看
some
questions,询问如何在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`); (这是我DB的一个非常简化的版本) 而且,我的查询代码如下所示: $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.
调用setIntegrityCheck(false)是进行连接的正确方式;如果您使用Zend_Db_Table和Zend_Db_Table_Select,则无法加入,除非您禁用完整性检查.
完整性检查是简单的,以确保查询不使用多个表,并且在到位时,确保可以删除或修改Zend_Db_Table_Row对象,然后保存,因为行数据是排除在单个表中,而不是来自不同表格的数据混合. 要表示您想要使用多个表,请指定setIntegrityCheck(false)让Zend Framework知道它是有意的.结果是你得到一个不能调用save()或delete()的锁定行. 这是Zend_Db_Table – Advanced Usage参考指南的引用(跳到第27个例子.
参见:One-to-Many Joins with Zend_Db_Table_Select (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |