请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 5366|回复: 0

[数据模型] 一表关联多表

[复制链接]
发表于 2012-8-4 22:45:23 | 显示全部楼层 |阅读模式

在数据库表关联查询中,我们经常会遇到一个表关联多个表的情况,如在论坛的应用程序中,用户表需要关联附件表来获取用户头像的地址,另外也需要关联用户组表来获取用户的用户组和权限等等。在这种情况下,我们可以使用spLinker做多个关联的linker参数,这样来获取这些数据。

用户表模型

  1. <?php
  2. class m_user extends spModel
  3. {
  4.         public $pk = 'uid';
  5.         public $table = 'user';

  6.         var $linker = array(
  7.                 'avatar' => array(
  8.                                 'type' => 'hasone',   // 一对一关联,一个用户只有一个头像
  9.                                 'map' => 'avatar',    // 关联的标识
  10.                                 'mapkey' => 'uid',  // 关联的字段
  11.                                 'fclass' => 'm_userimg', // 对应表的数据类是m_userimg
  12.                                 'fkey' => 'uid', // 对应表的关联字段
  13.                                 'enabled' => true
  14.                 ),
复制代码
  1. 'usergroup' => array(
  2.                                 'type' => 'hasmany',   // 一对多关联,一个用户可能属于多个用户组
  3.                                 'map' => 'usergroup',    // 关联的标识
  4.                                 'mapkey' => 'uid',  // 关联的字段
  5.                                 'fclass' => 'm_group', // 对应表的数据类是m_group
  6.                                 'fkey' => 'uid', // 对应表的关联字段
  7.                                 'enabled' => true
  8.                 ),
复制代码

这里可以看到,代码已经实现了一个用户数据关联到其他两个表上面了。

补充一下:

  • 如果需要关闭其中一个关联,可以通过 $obj->linker['avatar']['enabled'] = false;然后再执行spLinker,那么avatar的关联就会暂时消失了。
  • 本文说的一表关联多表,指的是一表分别关联到别的几个表上,而不是“A表关联B表,然后B表关联C表”这种递进的关联,对于这种递进式的关联,目前也没有很好解决方案,建议是直接使用SQL语句来进行关联查找会有最大的效率。

您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-2-19 21:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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