这几天接到好多个网友的问题,都是关于ThinkPHP3.2框架中若何利用多表联合查询,本日我来做一个统一的解答。
仔细看过文档的网友可能有把稳到,在ThinkPHP3.2中有一个 table 方法,用官方的话来说,table 方法是属于模型类的连贯操作方法之一,紧张用于指定操作的数据表,常日利用 table 方法是为了切换操作的数据表和对多表进行操作。
我们举个例子解释,这样更好理解,如果我们有两张表,一个是文章表(article),一个是种别表(category),如下图:

文章表 article
种别表 category
个中文章表(article)的 category 字段对应的是种别表(category)的 id ,也便是说,如果文章表(article)中有一条记录,这条记录中 category 的值为 1 的话,那么就读取出来的种别号便是种别表(category)中 id 为 1 的 title 的值,如下图:
文章表 article
种别表 cetegory
从上面的记录中可以看到,如果我们不做关联查询,而是直接输出这条记录的话,那么它显示的结果是这样的:
查询语句:
$list = M('Article')->find();
标题:怎么样才能学好前端开拓
种别:1
内容:这里是怎么样才能学好前端开拓的内容
那么很显然,种别显然不是我们想要的结果,由于我们是要让它关联种别表,把对应种别表中 id 为 1 的种别号显示出来,那么这时候我们可以用 table 方法进行关联查询:
查询语句:
$list = M('Article')->table('article as a,category as c')->where('a.category = c.id')->field('a.id as id,c.title as category,a.title as title,a.content as content')->find();
上面这个查询语句的意思便是说:用 table 方法给 article 和 category 起个别名,article 的别名为 a,category 的别名为 c,接着是 where 的查询条件是 a 表中的 category 即是 c 表的 id,然后由于这两个表中都有 title 这个字段,以是这里再用 field 方法做字段映射,a 表的 id 字段映射为 id,c 表的 title 字段映射为 category,a 表的 title 字段映射为 title,a 表的 content 字段映射为 content,那么我们在模板中输出的结果便是:
文章id:1 (字段:id)
标题:怎么样才能学好前端开拓(字段:title)
种别:前端资讯(字段:category)
内容:这里是怎么样才能学好前端开拓的内容(字段:content)
这样就实现了多表关联查询了,当然,还可以用原生的sql措辞查询,也可以用 join 方法查询,大家可以去看一下ThinkPHP的开拓手册,这里就只先容 table 方法。
感激你的阅读,如果你有更好的方法或在运用过程中碰着问题可以在评论区提问或者直接私信我,我会定期回答,码农刘小桥与你一起学习,共同进步。