前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >THINKPHP 中关联查询(多表查询)

THINKPHP 中关联查询(多表查询)

作者头像
PM吃瓜
发布2019-08-12 15:31:49
4.5K0
发布2019-08-12 15:31:49
举报
文章被收录于专栏:PM吃瓜(公众号)

THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法,请看示例:

1、Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:

$Model->Table('think_user user') ->where('status>1') ->select(); $Model->table('think_blog blog,think_type type') ->where('blog.typeid=type.id') ->field('blog.id as id,blog.title,blog.content,type.typename as type') ->order('blog.id desc' ) ->limit(5) ->select();

Table方法的参数支持字符串和数组,数组方式的用法:

$Model->Table(array('think_user'=>'user','think_group'=>'group')) ->where('status>1') ->select();

使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。

注:如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。

2Join方法:查询Join支持,Join方法的参数支持字符串和数组,并且join方法是连贯操作中唯一可以多次调用的方法。例如:

$Model->join('work ON artist.id = work.artist_id') ->join('card ON artist.card_id = card.id') ->select(); //Left Join $Model->table('user U') ->join('news N on U.id=N.cid') ->field('U.*,N.*') ->order('id desc') ->limit('8') ->findall();

默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成

$Model->join('RIGHT JOIN work ON artist.id = work.artist_id') ->select(); //Right Join $Model->table('user U') ->join(array('right','news N on U.id=N.cid')) ->field('U.*,N.*') ->order('id desc') ->limit('8') ->findall();

如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。

$Model->join(array(' work ON artist.id = work.artist_id', 'card ON artist.card_id = card.id')) ->select()

运用这种连贯操作方法,可以有效的提高数据查询的代码清晰度和开发效率。

查看连贯操作的SQL语句的方法:

echo $Model->getLastSql(); //打印一下SQL语句,查看一下

例2: 1、table()

$list = $user->table('user_status stats, user_profile profile')->where('stats.id = profile.typeid')->field('stats.id as id, stats.display as display, profile.title as title,profile.content as content')->order('stats.id desc' )->select();

2.1、join()2表查询

$user = new Model('user');

$list = $user->join('RIGHT JOIN user_profile ON user_stats.id = user_profile.typeid' );

2.2、join() 多表查询

$list = $Form->join('think_sort ON think_form.sort_id = think_sort.sort_id' )->join('think_brand ON think_form.brand_id = think_brand.brand_id' )->select();

3、原生查询

$Model = new Model();

$sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.','.$p->listRows; $voList = $Model->query($sql);

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tech爬虫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档