ThinkPHP二次开发,增加关联查询操作

  一直觉的ThinkPHP的关联操作很麻烦,所以遇到多对多的查询的时候我一般会直接在模型里自己写query。而对于一对多,或者一对一的查询操作再定义模型

去写query的话就未免太过麻烦。所以我直接在模型的基类里直接定义两个方法,当然也可以定义在自定义的类里面,以方便关联查询之用。

代码一:关联查询select的加强

 1 /**
 2      * 关联查询
 3      * 简单的双表关联查询
 4      * @param string $tableName 要关联的表名
 5      * @param string $selectField 副表要查询的字段 可以使用 as 关键字 与原生态的sql语句一样
 6      * @param string $VicetableField 副表的关联字段
 7      * @param string $mainTableField 主表的关联字段
 8      * @param string $relation 关联的关系 n:n 一对多一  n:m 多对多 默认n:m
 9      * @return array 查询到的结果集
10      * @version 2013/4/18 19:11
11      */
12     public function relationSelect($tableName,$selectField,$VicetableField,$mainTableField,$relation='n:m'){
13         $result=$this->select();
14         foreach ($result as $key=>$value){
15             $query=$this->db->query("select {$selectField} from ".$this->tablePrefix.$tableName." where {$VicetableField} = {$value[$mainTableField]}");
16             if($relation == 'n:n'){
17                 $result[$key][$tableName]=$query[0];
18             }else{
19                 $result[$key][$tableName]=$query;
20             }
21         }
22         return $result;
23     }

示例:

1     //在操作里先实例化模型,这里使用Thinkphp的D函数,可以直接使用之前定义的方法 查询一对一的结果
2     $adminList=D('Admin')->relationSelect('admin_group','id,name as groupName','id', 'gid','n:n');
3     //dump查看结果集
4     dump($adminList);

结果:

array(2) {
  [0] => array(8) {
    ["id"] => string(1) "1"
    ["gid"] => string(1) "1"
    ["username"] => string(4) "root"
    ["password"] => string(35) "e10adc3949ba59abbe56e057f20f883e"
    ["email"] => string(18) "shench@outlook.com"
    ["realname"] => string(9) "
XXX"
    ["logtime"] => string(1) "0"
    ["admin_group"] => array(2) {
      ["id"] => string(1) "1"
      ["groupName"] => string(15) "
超级管理员"
    }
  }
  [1] => array(8) {
    ["id"] => string(1) "2"
    ["gid"] => string(1) "1"
    ["username"] => string(6) "lichao"
    ["password"] => string(35) "e10adc3949ba59abbe56e057f20f883e"
    ["email"] => string(0) ""
    ["realname"] => string(6) "
XXX"
    ["logtime"] => string(1) "0"
    ["admin_group"] => array(2) {
      ["id"] => string(1) "1"
      ["groupName"] => string(15) "
超级管理员"
    }
  }
}

代码二:关联查询find的加强

 1 /**
 2      * 关联查询单条记录
 3      * 简单的双表关联查询
 4      * @param string $tableName 要关联的表名
 5      * @param string $selectField 副表要查询的字段 可以使用 as 关键字 与原生态的sql语句一样
 6      * @param string $VicetableField 副表的关联字段
 7      * @param string $mainTableField 主表的关联字段
 8      * @param string $relation 关联的关系 n:n 一对多一  n:m 多对多 默认n:m
 9      * @return array 查询到的单条结果
10      * @version 2013/4/18 19:11
11      */
12     public function relationFind($tableName,$selectField,$VicetableField,$mainTableField){
13         //与上面的代码相比,这里用的是内置的find方法 因为返回的是一维数组,所以也不用遍历
14         $result=$this->find();
15         $query=$this->db->query("select {$selectField} from ".$this->tablePrefix.$tableName." where {$VicetableField} = {$value[$mainTableField]}");
16         if($relation == 'n:n'){
17             $result[$key][$tableName]=$query[0];
18         }else{
19             $result[$key][$tableName]=$query;
20         }
21         return $result;
22     }

这第二段代码我就不做演示了。博主也是刚接触ThinkPHP不久,上面代码有什么问题或者可以改进的地方非常欢迎大家跟我讨论。

PS:看看我的园龄一年多了,没写什么东西,从今天起,我就写点什么吧。

 

转载于:https://www.cnblogs.com/beorht/archive/2013/04/20/Thinkphp_01.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值