仓酷云

标题: PHP网站制作之FleaPHP 开辟指南 - 7. 数据表联系关系 [打印本页]

作者: 飘飘悠悠    时间: 2015-2-4 00:11
标题: PHP网站制作之FleaPHP 开辟指南 - 7. 数据表联系关系
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。开辟指南|数据   数据表联系关系是指两个或多个数据表的纪录之间的逻辑关系。
例如:
今朝,FleaPHP 撑持四品种型的数据表联系关系,分离是:
在 FleaPHP 中,可觉得每个表数据进口界说多个分歧的联系关系,例如:
  1. <?phpload_class('FLEA_Db_TableDataGateway');class Model_ProductClass extends FLEA_Db_TableDataGateway{ var $tableName = 'product_class'; var $primaryKey = 'pclass_id'; var $hasMany = array( array( 'tableClass' => 'Model_Permissions', 'foreignKey' => 'pclass_id', 'mappingName' => 'permissions', ), array( 'tableClass' => 'Model_Products', 'foreignKey' => 'pclass_id', 'mappingName' => 'products', 'enabled' => false, ), ); var $hasOne = array( array( 'tableClass' => 'Model_ProductClassAdverts', 'foreignKey' => 'pclass_id', 'mappingName' => 'advert', ) );}?>
复制代码
术语

在具体引见这四种联系关系之前,先懂得一些后文将会用到的术语。
了解这几个术语后,咱们再来看每种联系关系的具体注释。

HAS_ONE 一对一联系关系

HAS_ONE 是一种十分复杂的联系关系关系。暗示一个纪录具有另外一个纪录。这两个纪录分离位于两个数据表中。
示例

在一个信息办理体系中,users 表用于存储用户帐户的根基信息,例如用户名、暗码等。而 profiles 表则用于存储用户的团体信息,例如家庭住址、邮政编码等。
因为每个用户(一条 users 表中的纪录)都有一份对应的团体信息(一条 profiles 表中的纪录)。因而,咱们就能够为 users 表界说一个 HAS_ONE 联系关系。
很分明,users 表的纪录具有一条 profiles 表的纪录。因而,当 users 表中的一笔记录被删除时,被删除纪录所具有的 profiles 表中的联系关系纪录也会被主动删除。
表界说

在 HAS_ONE 联系关系中,请求外键放置在联系关系表中。
上述例子的表界说简化版以下:
users 表:
profiles 表:
对应的 MySQL 代码以下:
  1. CREATE TABLE `users` ( `user_id` INT NOT NULL AUTO_INCREMENT , `username` VARCHAR( 32 ) NOT NULL , PRIMARY KEY ( `user_id` ));CREATE TABLE `profiles` ( `profile_id` INT NOT NULL AUTO_INCREMENT , `address` VARCHAR( 128 ) NOT NULL , `postcode` VARCHAR( 8 ) NOT NULL , `user_id` INT NOT NULL , PRIMARY KEY ( `profile_id` ));
复制代码
对应的 FLEA_Db_TableDataGateway 承继类的界说以下:
  1. <?phpload_class('FLEA_Db_TableDataGateway');class Users extends FLEA_Db_TableDataGateway{ var $tableName = 'users'; var $primaryKey = 'user_id'; var $hasOne = array( 'tableClass' => 'Profiles', 'foreignKey' => 'user_id', 'mappingName' => 'profile', );}class Profiles extends FLEA_Db_TableDataGateway{ var $tableName = 'profiles'; var $primaryKey = 'profile_id';}?>
复制代码
演示代码
  1. <?php// 起首拔出一条 users 纪录$modelUsers =& new Users();$newUserId = $modelUsers->create( array('username' => 'dualface'));// 接上去,再拔出一条 profiles 纪录$modelProfiles =& new Profiles();$modelProfiles->create( array( 'address' => 'SiChuan ZiGong', 'postcode' => '643000', 'user_id' => $newUserId ));// OK,咱们如今测验考试读取一条 users 纪录,看看会失掉甚么了局$user = $modelUsers->find($newUserId);dump($user);?>
复制代码
了局很风趣,多出来的 ‘profile’ 字段正好是咱们方才拔出 profiles 表的纪录内容:
  1. Array( [user_id] => 1 [username] => dualface [ref___id] => 1 [profile] => Array ( [profile_id] => 1 [address] => SiChuan ZiGong [postcode] => 643000 [user_id] => 1 [ref___id] => 1 ))
复制代码
申明

在下面的例子中,Users 类中有一个 $hasOne 成员变量。该变量为一个数组:
  1. var $hasOne = array( 'tableClass' => 'Profiles', 'foreignKey' => 'user_id', 'mappingName' => 'profile',);
复制代码
$hasOne 成员变量用于为一个表数据库进口指定 HAS_ONE 联系关系。

                               
登录/注册后可看大图
在联系关系的界说中,tableClass 指定联系关系表的表数据进口类称号,foreignKey 指定外键字段名,而 mappingName 则指定在主表的查询了局顶用甚么字段映照联系关系表的数据。





在相册系统的开发上,因为采用的是团队分工合作方式,更让我明白了在一个团队之中,团队成员之间的交流沟通的重要性,如果没有很好的沟通交流,成员之间的任务没有分配好。
作者: 柔情似水    时间: 2015-2-4 09:54
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 简单生活    时间: 2015-2-5 13:39
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 只想知道    时间: 2015-2-6 02:25
本文当是我的笔记啦,遇到的问题随时填充
作者: 若天明    时间: 2015-2-8 14:00
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 第二个灵魂    时间: 2015-2-24 04:43
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 海妖    时间: 2015-3-7 10:54
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
作者: 莫相离    时间: 2015-3-9 21:51
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者: 变相怪杰    时间: 2015-3-17 02:02
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: admin    时间: 2015-3-19 02:08
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 不帅    时间: 2015-3-26 23:54
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 爱飞    时间: 2015-4-2 19:28
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
作者: 谁可相欹    时间: 2015-4-6 04:46
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 深爱那片海    时间: 2015-4-10 06:43
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 灵魂腐蚀    时间: 2015-4-10 09:29
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 仓酷云    时间: 2015-4-10 14:58
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 小女巫    时间: 2015-4-18 15:31
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
作者: 蒙在股里    时间: 2015-4-26 23:07
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
作者: 飘飘悠悠    时间: 2015-4-27 23:25
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 透明    时间: 2015-4-29 06:26
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 再见西城    时间: 2015-5-9 17:25
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2