仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1373|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网站制作之FleaPHP 开辟指南 - 7. 数据表联系关系

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:11:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。开辟指南|数据   数据表联系关系是指两个或多个数据表的纪录之间的逻辑关系。
例如:

  • 每个国民都有一个身份证号码
  • 每位作者都写了多本(0-n)书本,而每本书本都有多个(1-n)作者
  • 每篇文章都有多个(0-n)评论
  • 每个评论都属于一篇文章
今朝,FleaPHP 撑持四品种型的数据表联系关系,分离是:

  • HAS_ONE: 以后表的每笔记录都具有最多一条(0C1)联系关系纪录
  • HAS_MANY: 以后表的每笔记录都具有多条(0-n)联系关系纪录
  • MANY_TO_MANY: 以后表的每笔记录都和其他表的多条(0-n)纪录联系关系
  • BELONGS_TO: 以后表的每笔记录都属于另外一个表的某笔记录
在 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', ) );}?>
复制代码
术语

在具体引见这四种联系关系之前,先懂得一些后文将会用到的术语。

  • 联系关系: 一个联系关系是一个关系,这个关系属于某一个数据表。例如 users 表能够就具有一个或多个联系关系。
  • 主表: 关于一个联系关系,具有该联系关系的数据表就是主表。例如 posts 表界说了一个 MANY_TO_MANY 联系关系。那末在这里(指这个联系关系),posts 就是主表。
  • 联系关系表: 在一个联系关系中,联系关系表就是除主表外的另外一个表。
  • 外键: 在数据库道理中,外键的寄义很庞杂。但在 FleaPHP 框架中的数据库联系关系功效中,外键泛指一个纪录顶用于联系关系另外一个纪录的字段。例如 profile 表中的 user_id 字段就是用于联系关系 users 表的字段。这个 user_id 字段就是一个外键。
  • 两头表: 在 MANY_TO_MANY 联系关系中,除主表和联系关系表,还需求另外一个表来保留这两个表的纪录之间的相互联系关系关系。这个表称为两头表。
了解这几个术语后,咱们再来看每种联系关系的具体注释。

HAS_ONE 一对一联系关系

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

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

在 HAS_ONE 联系关系中,请求外键放置在联系关系表中。
上述例子的表界说简化版以下:
users 表:

  • user_id 主键字段
  • username
profiles 表:

  • profile_id 主键字段
  • address
  • postcode
  • user_id 外键字段
对应的 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 则指定在主表的查询了局顶用甚么字段映照联系关系表的数据。





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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 23:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表