实例分析ThinkPHP关联模型的操作
2019-11-29 08:41:59来源:爱站网 阅读 ()
说到ThinkPHP关联模型的操作,其实是很强大很复杂的一部分,我们可以通过这些操作,将数据表的关联客观化,下面爱站技术频道小编告诉大家实例分析ThinkPHP关联模型的操作。
通常我们所说的关联关系包括下面三种:
◇ 一对一关联 : ONE_TO_ONE , 包括 HAS_ONE 和 BELONGS_TO
◇ 一对多关联 : ONE_TO_MANY , 包括 HAS_MANY 和 BELONGS_TO
◇ 多对多关联 : MANY_TO_MANY
关联定义
数据表的关联 CURD 操作,目前支持的关联关系包括下面四种:HAS_ONE 、 BELONGS_TO 、 HAS_MANY 、 MANY_TO_MANY 。
一个模型根据业务模型的复杂程度可以同时定义多个关联,不受限制,所有的关联定义都统一在模型类的 $_link 成员变量里面定义,并且可以支持动态定义。要支持关联操作,模型类必须继承 RelationModel 类,关联定义的格式是:
protected $_link = array(
' 关联 1' => array(
' 关联属性 1' => ' 定义 ',
' 关联属性 N' => ' 定义 ',
),
' 关联 2' => array(
' 关联属性 1' => ' 定义 ',
' 关联属性 N' => ' 定义 ',
),
...
);
HAS_ONE 关联方式的定义:
?
?
class UserModel extends RelationModel
{
public $_link = array(
'Profile'=> array(
'mapping_type' =>HAS_ONE,
'class_name'=>'Profile',
// 定义更多的关联属性
……
) ,
);
}
mapping_type 关联类型,这个在 HAS_ONE 关联里面必须使用 HAS_ONE 常量定义。
class_name 要关联的模型类名
mapping_name 关联的映射名称,用于获取数据用
foreign_key 关联的外键名称
condition 关联条件
mapping_fields 关联要查询的字段
as_fields 直接把关联的字段值映射成数据对象中的某个字段
BELONGS_TO 关联方式的定义:
?
?
'Dept'=> array(
'mapping_type'=>BELONGS_TO,
'class_name'=>'Dept',
'foreign_key'=>'userId',
'mapping_name'=>'dept',
// 定义更多的关联属性
……
) ,
class_name 要关联的模型类名
mapping_name 关联的映射名称,用于获取数据用
foreign_key 关联的外键名称
mapping_fields 关联要查询的字段
condition 关联条件
parent_key 自引用关联的关联字段
as_fields 直接把关联的字段值映射成数据对象中的某个字段
HAS_MANY 关联方式的定义:
?
?
'Article'=> array(
'mapping_type' =>HAS_MANY,
'class_name'=>'Article',
'foreign_key'=>'userId',
'mapping_name'=>'articles',
'mapping_order'=>'create_time desc',
// 定义更多的关联属性
……
) ,
class_name 要关联的模型类名
mapping_name 关联的映射名称,用于获取数据用
foreign_key 关联的外键名称
parent_key 自引用关联的关联字段
condition 关联条件
mapping_fields 关联要查询的字段
mapping_limit 关联要返回的记录数目
mapping_order 关联查询的排序
MANY_TO_MANY 关联方式的定义:
?
?
"Group"=>array(
'mapping_type'=>MANY_TO_MANY,
'class_name'=>'Group',
'mapping_name'=>'groups',
'foreign_key'=>'userId',
'relation_foreign_key'=>'goupId',
'relation_table'=>'think_gourpUser'
)
class_name 要关联的模型类名
mapping_name 关联的映射名称,用于获取数据用
foreign_key 关联的外键名称
relation_foreign_key 关联表的外键名称
mapping_limit 关联要返回的记录数目
mapping_order 关联查询的排序
relation_table 多对多的中间关联表名称
关联查询
使用 relation 方法进行关联操作, relation 方法不但可以启用关联还可以控制局部关联操作,实现了关联操作一切尽在掌握之中。
$User = D( "User" );
$user = $User->realtion(true)->find(1);
输出 $user 结果可能是类似于下面的数据:
?
?
array(
'id'=>1,
'account'=>'ThinkPHP',
'password'=>'123456',
'Profile'=> array(
'email'=>'liu21st@gmail.com',
'nickname'=>'流年',
) ,
)
关联写入
?
?
$User = D( "User" );
$data = array();
$data["account"]="ThinkPHP";
$data["password"]="123456";
$data["Profile"]=array(
'email'=>'liu21st@gmail.com',
'nickname' =>' 流年 ',
) ;
$result = $User->relation(true)->add($user);
这样就会自动写入关联的 Profile 数据。
关联更新
?
?
$User = D( "User" );
$data["account"]= "ThinkPHP";
$data["password"]= "123456";
$data["Profile"]=array(
'email'=>'liu21st@gmail.com',
'nickname' =>' 流年 ',
) ;
$result =$User-> relation(true)->where(‘id=3')->save($data);
?
关联删除
$result =$User->relation(true)->delete( "3" );
以上就是爱站技术频道小编分享的实例分析ThinkPHP关联模型的操作,详细看完的朋友一定都有所了解,学习的时候一定要选择适合自己的平台,才可达到较好的实现效果。
原文链接:https://js.aizhan.com/develop/php/10406.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- ThinkPHP3.1.x修改成功与失败跳转页面的方法 2020-03-22
- ThinkPHP分页类使用详解 2020-02-24
- ThinkPHP验证码使用简明教程 2020-02-24
- thinkPHP5项目中实现QQ第三方登录功能 2020-02-19
- PHP二维关联数组的遍历方式 2020-02-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash