加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:33:25 所属栏目:PHP教程 来源:网络整理
导读:我正在查看 some questions,询问如何在Zend Framework查询中进行加入,但答案总是像“只做setIntegrityCheck(FALSE)”一样. 我的问题是:为什么我需要这样做? 在我看来,禁用“诚信检查”不是正确的方法.在我特定的情况下,我正在使用带有外键的一些InnoDB表的
我正在查看 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个例子.

The Zend_Db_Table_Select is primarily used to constrain and validate
so that it may enforce the criteria for a legal SELECT query. However
there may be certain cases where you require the flexibility of the
Zend_Db_Table_Row component and do not require a writable or deletable
row. for this specific user case,it is possible to retrieve a row or
rowset by passing a FALSE value to setIntegrityCheck(). The resulting
row or rowset will be returned as a ‘locked’ row (meaning the save(),
delete() and any field-setting methods will throw an exception).

参见:One-to-Many Joins with Zend_Db_Table_Select

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读