位置: 编程技术 - 正文

Zend Framework教程之Zend_Db_Table表关联实例详解(zendstudio怎么创建php项目)

编辑:rootadmin

推荐整理分享Zend Framework教程之Zend_Db_Table表关联实例详解(zendstudio怎么创建php项目),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:framework7教程,zendframework3,zendframework3中文手册,zendframework3,zendstudio怎么创建php项目,zend framework手册,zendframework3中文手册,zendframework3中文手册,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了Zend Framework中Zend_Db_Table表关联用法。分享给大家供大家参考,具体如下:

介绍:

在RDBMS中,表之间有着各种关系,有一多对应,多多对应等等。

Zend框架提供了一些方法来方便我们实现这些关系。

定义关系:

下面是本文用的例子的关系定义:

我们看到例子中定义了四个类:Accounts,Products,Bugs,BugsProducts。其中Accounts,Products和Bugs是三个实体表,而BugsProducts是关系表。

我们再来分析一下这三个实体,一个Account有多个Bug,他们之间是一对多的关系,而Bug和Product是多对多的关系。

$_dependentTables是一个与该对象关联的对象名,这里注意,要写对象名而不是关联的数据库名。

$_referenceMap数组用来定义和其他表的关系,在这里可以设置和那些表有关系,有什么样的关系。第一个设置的是Rule Key,也就是上面例子的'Reporter', 'Engineer'之类的。Rule Key的作用其实就是一个关系的名字,并不需要和其他数据库表名或者其他对象名的名字一样。只是为了标记的,在后面的时候,我们可以看到这个Rule Key的作用。

每一个Rule下面都有如下的一些定义:(没有特殊说明,都以如上'Reporter'关系进行说明)

columns=> 设置和别的表关联的字段名,如上的'report_by'就是数据库中表Bugs的report_by字段。这里只有一个字段,也可以设置多个字段。

refTableClass=>用于设置与这个表发生关系的表。这里要注意,一定使用目标表的对象的名字而不是表名字,例子中就和'Account'对象发生了关联。

refColumns =>设置发生联系的表的字段。可以写多个,如果和多个字段发生联系的话,这里要和columns对应。这个设置其实是可选的,如果为空,关联字段自动被设置成为关联表的主键。上面例子中并没有使用主键作为关联字段,所以手动设置。

onDelete=>可选字段,设置当删除是的动作。onUpdate=>可选字段,设置当更新表时的动作。

以上定义关系。

从关联表中取数据:

如果我们已经得到了一个查询结果,我们可以通过一下语句去取得这个结果相关联的表的查询结果:

这个方法一般使用与一多对应的两个实体表中,在多多对应的两个实体表和一个关系表如何从一个实体表取出另一个实体表的数据,我们会在下面叙述。

第一个字段$table是指和这个表想相联系的表对应的类名。第二个字段是可选的,是我们刚刚说到的rule key,就是这个关系的名字,如果省略,则默认为这个表中的第一个关系。下面是例子:

Zend Framework教程之Zend_Db_Table表关联实例详解(zendstudio怎么创建php项目)

例子中,我们先读取了一个编号为的用户,然后去查找这个家伙报了什么bug,由于zend默认是第一个关联,所以这里和Account发生关联的第一个就是'Reporter,所以就取出了Reporter的记录。

如果我们想取出其他的记录,比如Engineer,可以按照下面的办法:

除了使用findDependentRowset之外,我们还可以使用叫做“魔术方法”(Magic Method)的机制。之所以这么叫,就是因为好像是在变魔术一样。所以方法findDependentRowset('<TableClass>', '<Rule>')就可以等价于如下:

- $row->find<TableClass>()- $row->find<TableClass>By<Rule>()

注:这个机制是我们最一开始是在Ruby on Rails里面看到的。这里的<TableClass>和<Rule>一定要使用和相关联的类名以及关联名(Rule Key)完全一样的名字,才可以生效。下面是例子:

从父表取得字段:

刚刚我们介绍了一多关系中的从一去多的方法,现在我们反过来,从多取一,其实是从多中的一个取他相对应的那个记录。

类似的我们有这样的语句:

类似的,$table为类名,而可选参数$rule填入对应的Rule Key。下面是例子:

和上面不太一样的是,上面返回的是一个多个记录的集合,而这次返回的必然是一条记录。下面的例子是设置Rule:

只需要吧Rule填入就好了。相似的,这个方法也有“魔术字段”。findParentRow('<TableClass>', '<Rule>')对应:

- $row->findParent<TableClass>()- $row->findParent<TableClass>By<Rule>()

例子:

取得多对多关系表的字段:

上面两个方法讲述了一对多的使用,下面就是多对多了。我们使用如下方法取得多对多关系表的数据:

这里参数变成了4个,因为需要增加一个关系表来存储多对多的关系。

$table是与之发生多对多关系的表的类名,$intersectionTable是中间存储关系的关系表的类名。$rule1和$rule2是上面两个数据表的Rule Key。省略Rule Key的例子如下:

下面是该方法的全部参数调用例子:

这次的“魔术方法”是,对应 findManyToManyRowset('<TableClass>', '<IntersectionTableClass>', '<Rule1>', '<Rule2>')- $row->find<TableClass>Via<IntersectionTableClass>()- $row->find<TableClass>Via<IntersectionTableClass>By<Rule1>()- $row->find<TableClass>Via<IntersectionTableClass>By<Rule1>And<Rule2>()

例子:

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP getallheaders无法获取自定义头(headers)的问题 在客户端请求的时候增加了自定义的http头,请求如下所示:自定义http请求头var_dump(getallheaders);一开始通过getallheaders参数获取,但是发现在nginx部署的服

ThinkPHP路由机制简介 本文实例讲述了ThinkPHP路由机制。分享给大家供大家参考,具体如下:ThinkPHP支持URL路由功能,要启用路由功能,需要设置ROUTER_ON参数为true。开启路由功

ThinkPHP模板Volist标签嵌套循环输出多维数组的方法 本文实例讲述了ThinkPHP模板Volist标签嵌套循环输出多维数组的方法。分享给大家供大家参考,具体如下:ThinkPHP中对volist标签嵌套使用可实现多维数组的

标签: zendstudio怎么创建php项目

本文链接地址:https://www.jiuchutong.com/biancheng/293165.html 转载请保留说明!

上一篇:SSO单点登录的PHP实现方法(Laravel框架)(oauth2 sso单点登录)

下一篇:PHP getallheaders无法获取自定义头(headers)的问题(php get_headers)

  • 所得税月度申报
  • 降低个人税负什么意思
  • 税务检查的定义
  • 顺丰电子发票开错了可以重新开吗
  • 清算报告与清算方案区别
  • 民非企业增值税减免账务处理
  • 国家相关规定出车补助的文件
  • 出售简易征收的固定资产的增值税怎么计算
  • 个税手续费返还属于政府补助吗
  • 生产企业固定资产折旧
  • 企业公益性捐赠支出税前扣除标准
  • 营改增后常用发票报销的种类有哪些呢?
  • 销售成本结转中的库存商品的单价错了怎么改u8
  • 转账支票需要哪些资料
  • 确认一个会计项目应符合的基本标准有
  • 增值税普通发票税率
  • 出口退税的办理影响出口吗
  • 航天服务费530是什么?
  • 应税行为扣除额期初余额
  • 固定资产折旧方法可以变更吗
  • 增值税更正申报表需要逐月更正吗
  • 增值税完税凭证怎么做账
  • 出口货物应退税额确认的会计分录
  • 开发阶段包括
  • 知识产权代理公司前景如何
  • 公司开办期间账务处理
  • 废料收入应如何确定
  • 加班工资算补贴么
  • 企业应纳税所得额计算公式
  • 可转债 承销
  • windows10如何清理磁盘碎片
  • 完工产品成本的直接材料怎么算
  • 固定资产备抵科目怎么填
  • php 二进制转十六进制
  • 办公室买花卉怎么做分录
  • 已抄报未反写什么意思
  • 小规模纳税人每月申报什么税
  • 上月的会计分录做错了
  • vue面试题视频
  • javascript百炼成仙免费
  • css如何应用
  • 服装制造行业成本占比
  • 财务费用的利息费用怎么算
  • 商品和服务税收分类编码表下载
  • 存货非正常损失可以所得税前扣除吗
  • 企业开具劳务费发票怎么开,税率多少
  • 先弥补亏损还是先分配利润
  • 开发票明目
  • 福利费超过多少交税
  • 税率变更协议怎么写
  • 个人独资企业购入设备可以一次性计提吗
  • 个税适用税率怎么确定
  • 两处以上取得工资如何申报个税
  • 承租人收到融资租赁款
  • 加工费的进项发票摘要写什么
  • 租房免租是什么意思
  • 母公司为子公司承担税费
  • 小规模购买税控盘分录怎么写
  • 企业构建固定资产无形资产和其他长期资产支付
  • 红字冲销有没有时间限制
  • 红十字会是事业编还是行政编
  • 换工作时社保公积金怎么办
  • 建账有哪些步骤,每个步骤有哪些注意事项
  • sql server中查看创建的数据库命令
  • sql参数化是什么意思
  • win10系统预览版
  • ubuntu安装超详细教程
  • 正确安全管理操作手册
  • 如何使用组策略脚本
  • .bas是什么文件
  • rtvscn95.exe - rtvscn95是什么进程 有什么用
  • 牛叉叉旗舰店没有了改名成啥了
  • linux中date命令详解
  • Python使用QQ邮箱发送Email的方法实例
  • python 嵌套
  • 东莞市国家税务局网上办税大厅
  • 税控盘反写后才能开票吗
  • 建筑业按多少税收
  • 河北国税网上办税云厅手机
  • 南通国资委网站首页
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设