thinkphp关联查询

首先,我们就瞎定义几张表吧!

1,user表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(20) default NULL,
  `password` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

2,用户信息表:userinfo:

CREATE TABLE `userinfo` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `phone` varchar(22) default NULL,
  `addirss` varchar(150) default NULL,
  `age` varchar(10) default NULL,
  `sex` varchar(10) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

3,用户应用表:

CREATE TABLE `userapp` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `app_name` varchar(20) default NULL,
  `app_info` text,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8

说说三个表之间的关系吧,

用户表(user)和(userinfo)之间的关系:每个用户只对应一个用户信息,所以是一对一的关系HAS_ONE

用户表(user)和(userapp)之间的关系:每个用户可以对应多个应用,所以是一对多的关系HAS_MANY

我们要实现一个效果,就是查询是每个用户对应它的信息和它所有的应用,看看下面怎么实现吧!

第一:建立之间的对应关系:

          在thinkphp之中,定义关联关系得用$_link变量,例如:public $_link = array();就写写他们的对应关系吧!

          先建立控制器:UserAction.class.php
          在建立对应模型:UserModel.class.php,这个得继承RelationModel类
class UserModel extends RelationModel {     

public $_link = array (
  //一对一关系
  'userinfo' => array (
   'mapping_type' => HAS_ONE, //定义为一对一关系
   'class_name' => 'Userinfo'
  ),
  
  //一对多关系
  'userapp'=>array(
   'mapping_type' =>HAS_MANY,//定义为一对多关系
   'class_name'=>'Userapp',//对应的Model的类名
            'foreign_key'=>'user_id', //对应的外键ID
            'mapping_name'=>'Userapp', //获取值的名称
            //'mapping_order'=>'create_time desc',
  )
  );

}

就这么简单,看看怎么把数据查询出来吧!

在控制器中  也就是action中写

 

class UserAction extends Action{
 //一对一 一对多 关联查询
 public function index(){
  $User = D("User");
  $u = $User->relation(true)->findAll();
  //dump($u);
  $this->assign('u',$u);
  $this->display('index');
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值