|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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 中,可觉得每个表数据进口界说多个分歧的联系关系,例如:- <?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 表:
profiles 表:
- profile_id 主键字段
- address
- postcode
- user_id 外键字段
对应的 MySQL 代码以下:- 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 承继类的界说以下:- <?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';}?>
复制代码 演示代码
- <?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 表的纪录内容:- 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 成员变量。该变量为一个数组:- var $hasOne = array( 'tableClass' => 'Profiles', 'foreignKey' => 'user_id', 'mappingName' => 'profile',);
复制代码 $hasOne 成员变量用于为一个表数据库进口指定 HAS_ONE 联系关系。
在联系关系的界说中,tableClass 指定联系关系表的表数据进口类称号,foreignKey 指定外键字段名,而 mappingName 则指定在主表的查询了局顶用甚么字段映照联系关系表的数据。
在相册系统的开发上,因为采用的是团队分工合作方式,更让我明白了在一个团队之中,团队成员之间的交流沟通的重要性,如果没有很好的沟通交流,成员之间的任务没有分配好。 |
|