zend-framework – Zend中的setIntegrityCheck选择连接

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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

脚本宝典总结

以上是脚本宝典为你收集整理的zend-framework – Zend中的setIntegrityCheck选择连接全部内容,希望文章能够帮你解决zend-framework – Zend中的setIntegrityCheck选择连接所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。