ThinkPHP关联模型详解

简介:

        在ThinkPHP中,关联模型更类似一种mysql中的外键约束,但是外键约束更加安全,缺点却是在写sql语句的时候不方便,ThinkPHP很好得解决了这个问题.但是很多人不动关联模型的意思.现在就写个例子.让大家理解ThinkPHP关联模型的意思.

        

        环境描述:公司有一个员工表think_user,一个档案表,think_archives,一个部门表,think_department,和一个银行卡表.think_cars.

        一个员工只有一个档案表,所以关系就是HSA_ONE,

        一个员工只属于一个部门,但是部门里有多个员工,所以是BELONGS_TO关系

        一个员工有多个银行卡,但是一个银行卡只能属于一个员工.所以关系就是HAS_MANY.


        先创建需要的表和测试数据

       think_user表.

1
2
3
4
5
6
7
CREATE  TABLE  `think_user` (
   `id`  int (11)  NOT  NULL  AUTO_INCREMENT,
   `username`  varchar (50)  NOT  NULL ,
   ` password varchar (50)  NOT  NULL ,
   `did`  int (11)  NOT  NULL ,
   PRIMARY  KEY  (`id`)
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8 |

        think_department

1
2
3
4
5
  CREATE  TABLE  `think_department` (
   `id`  int (11)  NOT  NULL  AUTO_INCREMENT,
   ` name varchar (50)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`)
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8 |

        think_archives

        

1
2
3
4
5
6
7
8
CREATE  TABLE  `think_archives` (
   `id`  int (7)  NOT  NULL  AUTO_INCREMENT,
   `uid`  int (11)  NOT  NULL ,
   `addr`  varchar (200)  DEFAULT  NULL ,
   `email`  varchar (30)  DEFAULT  NULL ,
   `tel`  int (13)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`)
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8 |


think_cars

1
2
3
4
5
6
7
CREATE  TABLE  `think_cars` (
   `id`  int (11)  NOT  NULL  AUTO_INCREMENT,
   ` name varchar (50)  DEFAULT  NULL ,
   `type`  varchar (50)  DEFAULT  NULL ,
   `uid`  int (11)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`)
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8


插入数据到部门表think_department

1
2
3
4
insert  into  think_cars  values
      ( null , 'gongxiang' , '工商卡' , '1' ),
      ( null , 'jianshe' , '建行卡' , '2' ),
      ( null , 'jiaohang' , '交通银行卡' ,3);

think_user数据

1
2
3
4
5
6
7
8
9
10
insert  into  think_archives  values
      ( null ,1, '北京' , '123@163.com' , '13888888' ),
     ( null ,2, '上海' , '111@qq.com' , '1377777' ),
      ( null ,3, '重庆' , '222@qq.com' , '1344444' ),
      ( null ,4, '天津' , '333@qq.com' , '1111111' ),
     ( null ,5, '山西' , '444@qq.com' , '1322222' ),
    ( null ,6, '河北' , '555@qq.com' , '1333333' ),
      ( null ,7, '广州' , '6666@qq.com' , '13232323' ),
     ( null ,8, '广东' , '7777@qq.com' , '121121212' ),
      ( null ,9, '深证' , '888@qq.com' , '1821212' );

think_cars数据

1
2
3
4
5
insert  into  think_cars  values
      ( null , 'gongxiang' , '工商卡' , '1' ),
     ( null , 'jianshe' , '建行卡' , '2' ),
     ( null , 'jiaohang' , '交通银行卡' ,3);
Query OK, 3  rows  affected (0.01 sec)

think_archives

1
2
3
4
5
6
7
8
9
10
insert  into  think_archives  values
      ( null ,1, '北京' , '123@163.com' , '13888888' ),
      ( null ,2, '上海' , '111@qq.com' , '1377777' ),
      ( null ,3, '重庆' , '222@qq.com' , '1344444' ),
      ( null ,4, '天津' , '333@qq.com' , '1111111' ),
    ( null ,5, '山西' , '444@qq.com' , '1322222' ),
      ( null ,6, '河北' , '555@qq.com' , '1333333' ),
      ( null ,7, '广州' , '6666@qq.com' , '13232323' ),
      ( null ,8, '广东' , '7777@qq.com' , '121121212' ),
     ( null ,9, '深证' , '888@qq.com' , '1821212' );


ok,数据和表创建完了,下面讲如何用ThinkPHP的关联模型去获取表中数据

现在Model文件夹里创建UserModel.class.php

1
2
<?php
class  UserModel extend RelationModel{}


  1. 先做部门和员工之间的关系.员工表的did和部门表的id对应


1
2
3
4
5
6
7
8
9
10
class  UserModel  extends  RelationModel{
     protected  $_link = array (
             'Department' => array (
                     'mapping_type' =>BELONGS_TO,
                     'class_name' => 'Department' ,
                     'mapping_name' => 'Department' ,
                     'foreign_key' => 'did' ,
                 ),
         );
}


mapping_type是要关联的模型类名

mapping_name 关联表的模型名称

foreign_key   关联表的外键定义

mapping_fields    关联表要查询的字段,默认为全部字段

condition   关联条件

parent_key 自引用关联字段

as_fields   字段别名定义


2.员工表和档案表之间的关系

1
2
3
4
5
6
7
8
protected  $_link = array (
         'Archives' => array (
                 'mapping_type' =>HAS_ONE,
                 'class_name' => 'Archives' ,
                 'foreign_key' => 'id' ,
                 'condition' => 'uid'
             ),
     );


3.员工表与银行卡表之间关系的定义

1
2
3
4
5
6
7
8
protected  $_link = array (
             'Cars' => array (
                     'mapping_type' =>HAS_MANY,
                     'class_name' => 'Cars' ,
                     'foreign_key' => 'id' ,
                     'condition' => 'uid' ,
                 ),
         );


使用方法,在IndexAction.class.php中

1
2
3
4
5
6
7
class  IndexAction  extends  Action {
     public  function  index(){
         $user =D( 'User' );
         $row = $user ->relation(true)->select();
         dump( $row );
     }
}









本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1419856,如需转载请自行联系原作者
目录
相关文章
|
监控 druid
druid 连接池监控报错 Sorry, you are not permitted to view this page.
druid 连接池监控报错 Sorry, you are not permitted to view this page.
880 0
|
6月前
|
机器学习/深度学习 人工智能 缓存
BlockDance:扩散模型加速革命!复旦字节联手实现50%无损提速
BlockDance 是复旦大学与字节跳动联合推出的扩散模型加速方法,通过识别重用相邻时间步中的结构相似特征,减少冗余计算,最高可加速50%,同时保持生成质量。
191 27
BlockDance:扩散模型加速革命!复旦字节联手实现50%无损提速
|
9月前
|
SQL 数据采集 DataWorks
DataWorks产品最佳实践测评:用户画像分析实践
DataWorks作为阿里云提供的一款大数据开发治理平台,以其强大的数据处理能力和便捷的操作界面,在数据处理领域扮演着重要角色。本文将基于个人体验,对DataWorks产品进行最佳实践测评,重点探讨用户画像分析实践,并提出优化建议。
193 11
|
10月前
|
算法 网络协议 数据挖掘
阿里云通用算力型U1实例性能、适用场景、与经济型e区别、收费标准参考
在阿里云目前的活动中,通用算力型u1实例是一款价格相对较低且性价比较高的实例规格,通用算力型Universal实例(U实例)能提供均衡的计算、内存和网络资源,支持多种处理器和多种处理器内存配比。该类型实例依托阿里云资源池化技术和智能调度算法进行动态资源管理,为您的应用提供持续的算力保障、稳定性保障、供应及弹性保障,可以满足大多数场景下的应用需求,是一款具有高性价比的企业级实例。本文为大家介绍通用算力型U1实例的性能、适用场景、收费标准,以及和经济型e实例的区别,以供参考。
|
Ubuntu Shell
【Ubuntu系统】三步更新自己的Cmake最新版本
Ubuntu系统中通过三步简单流程更新Cmake到最新版本的具体操作方法,包括卸载旧版本、下载并运行安装脚本以及创建软链接。
3285 1
|
机器学习/深度学习 供应链 算法
区块链与机器学习:未来科技交叉口的深度洞察
随着科技进步,区块链与机器学习成为焦点技术。区块链以去中心化和安全性革新金融、供应链等领域;机器学习通过算法促进各行业创新。二者结合,区块链提供可靠数据支持机器学习,而机器学习优化区块链性能。应用场景包括金融信用评估、供应链管理、医疗健康及智能合约等。面对数据隐私保护、算法优化等挑战,需跨学科合作并完善政策法规。展望未来,技术突破、产业应用拓展及跨学科人才培养将推动这一领域向前发展。
879 3
|
监控 安全 网络安全
智能合约的安全审计与风险评估:技术解析与应对策略
【8月更文挑战第4天】智能合约的安全审计与风险评估是保障区块链应用安全的重要环节。通过严格的代码审查、使用安全编程规范、实施权限控制以及监控和应急响应等措施,可以有效降低智能合约的安全风险。未来,随着区块链技术的不断发展和智能合约的广泛应用,对智能合约的安全审计与风险评估也将变得更加重要和复杂。因此,我们需要持续关注智能合约的安全问题,并不断探索新的安全技术和方法。
|
传感器 人工智能 算法
逐渐走向实用,揭秘世界顶尖人形机器人ASIMO
从《列子·汤问》传说中以假乱真的舞者到现在科幻作品中的各种类人机器人,人类从没停止过对创造类人机器的幻想。而随着机器人学、人工智能和计算科学等科学技术的发展,人类长久以来的梦想正在逐渐成为现实,我们的生活中也渐渐开始有了它们的身影。
1410 0
逐渐走向实用,揭秘世界顶尖人形机器人ASIMO
|
关系型数据库 MySQL Linux
linux debian系统使用mysql教程
linux debian系统使用mysql教程
730 0
linux debian系统使用mysql教程
|
SQL 关系型数据库 数据库
7 款常用的 PostgreSQL GUI 工具测评
PostgreSQL 本身附带一个名为 psql 的内置 CLI,但有些人不喜欢通过命令行编写查询。本篇文章,码匠列举和介绍了可用于查询、可视化与分析 PostgreSQL 数据的 GUI 工具。
15883 1
7 款常用的 PostgreSQL GUI 工具测评