Thinkphph 使用RelationModel的三表关联查询机制
有如下三个表
a表 b表 c表
id bid other id cid other id other
a表的bid关联b表的id,b表的cid关联c表的id
现在需要查询a表的时候顺带把b表和c表的相关信息也查询出来
很多人一开始就想到使用原生的sql语句
select * from a left join b on a.bid=b.id left join c on b.cid=c.id;
但这并不是我想要的!
直接给出使用案例
class AModel extends RelationModel
{
protected $_link = array(
'B'=>array(
'class_name' => 'B',
'mapping_type' => self::BELONGS_TO,
'mapping_name' => 'b',
'foreign_key' => 'bid',//关联id
),
//c表要间接关联b表
'C' => array(
'class_name' => 'C',
'mapping_type' => self::MANY_TO_MANY,
'mapping_name' => 'c',
'mapping_key' => 'bid', // a.bid, a表要关联b表的字段
'foreign_key' => 'id', // c.id
'relation_foreign_key' => 'cid', // b.cid b表要关联c表的字段
'relation_table' => '__B__', //b表,双下划线加大写,会自动转换统一格式的表,如果多个大写例如BFModel,写成__B_F__中间需要用一个下划线隔开
),
);
Thinkphph 使用RelationModel的三表关联查询机制的更多相关文章
- oracle 三表关联查询
oracle 三表关联查询 CreationTime--2018年7月4日17点52分 Author:Marydon 左连接实现三表关联 表A--------------------------- ...
- oracle 两表关联查询
oracle 两表关联查询 CreationTime--2018年7月4日17点27分 Author:Marydon 情景描述 查询学生表student,sname,sex,age信息及所在班级c ...
- MySQL查询(关联查询)
一.mysql查询与权限 (一)数据库关联查询 **内连接查询(inner join)** 查询两个表共有的数据,交集 SELECT * FROM tb1 INNER JOIN tb2 ON 条件 所 ...
- SQL三表左关联查询
今天在开发的时候遇到了一个需求就是三遍关联查询,表A包含有表B和表C的uid,然后使用left join左关联查询: SELECT c.`uid`, `fromuseruid`, `touseruid ...
- orm 语法 数据库连接、建表、增删改查、回滚、单键关联 、多键关联、三表关联
1.数据库连接, #!usr/bin/env/python # -*- coding:utf-8 -*- # from wangteng import sqlalchemy from sqlalche ...
- 关联查询 join on 和比较运算符 in
join on多表之间的关联查询 写法select 字段 from 表1 t join 表2 s on t.字段1 = s.字段1 where 条件: 也可以这么写select 字段 from 表1 ...
- 通过一个小问题来学习SQL关联查询
原话题: 是关于一个left join的,没有技术难度,但不想清楚不一定能回答出正确答案来: TabA表有三个字段Id,Col1,Col2 且里面有一条数据1,1,2 TabB表有两个字段Id,Col ...
- 学习SQL关联查询
通过一个小问题来学习SQL关联查询 原话题: 是关于一个left join的,没有技术难度,但不想清楚不一定能回答出正确答案来: TabA表有三个字段Id,Col1,Col2 且里面有一条数据1,1, ...
- (一)SQL关联查询的使用技巧 (各种 join)
---恢复内容开始--- (一)SQL关联查询的使用技巧 (各种 join) 这几天因为工作的时候,发现自己的sql语句基础不是很好,特意研究了一下,发现sql语句真的是博大精深,sql语句不仅是要查 ...
随机推荐
- chrome 调试进入 paused in debugger 状态解决办法
今天调试代码的时候总是一刷新就进入 debugger 状态,总是需要按几次 F8 才能进到页面,我那个暴脾气啊,几次后终于是忍不住了,然后再网上找到了解决办法.就如一位网友所说,“Oh God! I ...
- 修复ubuntu引导
1. 插入ubuntu光盘启动临时ubuntu 2. ctrl alt t 进入命令行 3. 过程如下
- [Day9]面向对象
1.面向过程与面向对象 (1)面向对象思维方式是一种更符合人们思考习惯的思想 (2)面向过程思维方式中更多的体现的是执行者,而面向对象中更多的体现的是指挥者 (3)面向对象思维方式将复杂的问题简单化 ...
- typescript interface 泛型
interface interface Obj { [index: string]: any; } class Person { name: string; } let obj: obj = { na ...
- linux 下tftpf搭建
什么是TFTP服务 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户机与服务器之间进行 简单文件传输的协 ...
- log4j:WARN No appenders could be found for logger 解决方案
我们在使用Log4j的时候,总是出现: log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.Log ...
- php中获取中文首字母程序代码
年会抽奖,要求一等奖的中奖概率是0.12%,二等奖中奖概率是3%,三等奖中奖概率是12%,其他中奖概率是都是谢谢惠顾. <?php /** * 抽奖 * @param int $total */ ...
- 配置 ROS 的 apt 源
配置 ROS 的 apt 源 ROS的apt源有官方源.国内 USTC 源或新加坡源可供选择, 选择其一就可以了,建议使用国内 USTC 源或新加坡源,安装速度会快很多. 方式一:官方源 $ sudo ...
- tiny6410的启动参数
bootargs=root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 bootcmd=nand led ...
- vue组件传值
组件的传值(组件之间的通讯) 1.父子通信 1)父传子 传递:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据 接收:在子组件内部通过props进行接收 接收的 ...