快捷搜索:  汽车  科技

thinkphp查询是否有数据(ThinkPHP之多表联合查询)

thinkphp查询是否有数据(ThinkPHP之多表联合查询)类别表 cetegory文章表 article文章表 article类别表 category其中文章表(article)的 category 字段对应的是类别表(category)的 id ,也就是说,假如文章表(article)中有一条记录,这条记录中 category 的值为 1 的话,那么就读取出来的类别名就是类别表(category)中 id 为 1 的 title 的值,如下图:

为了让初学者更容易理解,本文写的比较详细,所以如果你已是技术大拿,请直接绕过,以免浪费你的宝贵时间,谢谢。

这几天接到好多个网友的问题,都是关于ThinkPHP3.2框架中怎样使用多表联合查询,今天我来做一个统一的解答。

仔细看过文档的网友可能有注意到,在ThinkPHP3.2中有一个 table 方法,用官方的话来说,table 方法是属于模型类的连贯操作方法之一,主要用于指定操作的数据表,通常使用 table 方法是为了切换操作的数据表和对多表进行操作。

我们举个例子说明,这样更好理解,假如我们有两张表,一个是文章表(article),一个是类别表(category),如下图:

thinkphp查询是否有数据(ThinkPHP之多表联合查询)(1)

文章表 article

thinkphp查询是否有数据(ThinkPHP之多表联合查询)(2)

类别表 category

其中文章表(article)的 category 字段对应的是类别表(category)的 id ,也就是说,假如文章表(article)中有一条记录,这条记录中 category 的值为 1 的话,那么就读取出来的类别名就是类别表(category)中 id 为 1 的 title 的值,如下图:

文章表 article

thinkphp查询是否有数据(ThinkPHP之多表联合查询)(3)

类别表 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 方法。

谢谢你的阅读,如果你有更好的方法或在应用过程中遇到问题可以在评论区提问或者直接私信我,我会定期回复,码农刘小桥与你一起学习,共同进步。

猜您喜欢: