在ThinkPHP中,系统也是支持联表查询操作,但是可以归纳成两种办法:table方法、join方法。
1、table方法
原生的语法中table方法的语法:select 表1.字段,表2.字段 from 表1 as 别名1,表名2 as 别名2 where 表1.字段 = 表2.字段;

Where的语句含义:也便是通过where语法来进行两个表的关联操作。
案例:查询每小我员的全部信息,哀求利用table语法。
剖析:由于职员信息中,有一个字段“dept_id”,这个字段是部门表中的主键,以是此处该当读取出部门的名称。以是哀求关联部门表。关联的条件是职员表中的dept_id即是部门表中的id。
主表:sp_user 别名:t1
从表:sp_dept 别名:t2
原生的sql语句:select t1.,t2.name as deptname from sp_user as t1,sp_dept as t2 where t1.dept_id = t2.id;
在navicat中实行的结果:
将上述的代码,在ThinkPHP中实现查询的效果:
方法1:可以利用实行原生的sql语句进行实行
方法2:可以利用table方法实现
在ThinkPHP中一样平常不建议频繁的利用实行原生的sql语句方法实行sql,以是上述的方法还可以写成其余的一种形式:
$model -> table(‘表名1 [as 别名1],表名2 [as 别名2]…’); //table方法也是连贯操作中的一个赞助方法。在利用table方法之后模型会自动关联上table方法中指定的数据表。
下面可以利用table方法改写之前的原生的sql:
实行结果中的sql:
2、join方法
在join语法中,上述圈出的用的比较多。
在原生的sql中,join的语法:select 表1.字段,表2.字段 from 表1 as 别名 [inner/left/right/full] join 表2 as 别名 on 表1.字段 = 表2.字段;
案例:查询部门的详细信息,列出每一条部门信息中的pid对应的部门名称。
解释:在往后的实际利用的时候,会碰着一种关联情形便是自己关联自己,自联查询。
主表:sp_dept 别名:t1
从表:sp_dept 别名:t2
条件:t1.pid = t2.id
原生的sql:select t1.,t2.name as deptname from sp_dept as t1 left join sp_dept as t2 on t1.pid = t2.id;
将上述的sql放到navicat中实行:
在ThinkPHP中去实行上述的代码:
Join联表语法:
$model -> join(‘联表办法 join 表名 [as 别名] on 表1.字段 = 表2.字段’); //join方法也是连贯操作的赞助方法之一,只有一个参数。
如果须要给当前模型关联的表起别名的话,则可以利用alias方法:
$model -> alias(‘别名’); //alias也是赞助方法之一
实行结果:
跟踪信息中的sql: