吾爱编程 网站首页 程序人生 PHP开发 查看内容

关于thinkphp查询,3.X 5.0方法总结

2019-3-12 20:50| 发布者: admin| 查看: 1178| 评论: 0

摘要: 一、介绍ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(个别数 ...
一、介绍

ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(个别数据库例如Mongo在表达式查询方面会有所差异),系统帮你解决了不同数据库的差异性,因此我们把框架的这一查询方式称之为查询语言。查询语言也是ThinkPHP框架的ORM亮点,让查询操作更加简单易懂。下面来一一讲解查询语言的内涵。

二、查询方式

ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。

1.使用字符串作为查询条件

这是最传统的方式,但是安全性不高,例如:

<!--?php 
$User = M("User"); // 实例化User对象 
$User--->where('type=1 AND status=1')->select(); 
?>

最后生成的SQL语句是

<!--?php 
$User = M("User"); // 实例化User对象 
$condition['name'] = 'thinkphp'; 
$condition['status'] = 1; 
// 把查询条件传入查询方法 
$User--->where($condition)->select(); 
?>

最后生成的SQL语句是

<!--?php 
$User = M("User"); // 实例化User对象 
$condition['name'] = 'thinkphp'; 
$condition['account'] = 'thinkphp'; 
$condition['_logic'] = 'OR'; 
// 把查询条件传入查询方法 
$User--->where($condition)->select(); 
?>

最后生成的SQL语句是

<!--?php 
$User = M("User"); // 实例化User对象 
// 定义查询条件 
$condition = new stdClass(); 
$condition--->name = 'thinkphp'; 
$condition->status= 1; 
$User->where($condition)->select(); 
?>

最后生成的SQL语句和上面一样

<!--?php 
$User = M("User"); // 实例化User对象 
// 要修改的数据对象属性赋值 
$data['name'] = 'ThinkPHP'; 
$data['score'] = array('exp','score+1');// 用户的积分加1 
$User--->where('id=5')->save($data); // 根据条件保存修改的数据 
?>

四、快捷查询

<!--?php 
$User = M("User"); // 实例化User对象 
$map['name|title'] = 'thinkphp'; 
// 把查询条件传入查询方法 
$User--->where($map)->select(); 
?>

查询条件就变成

<!--?php 
$User = M("User"); // 实例化User对象 
$map['status&title'] =array('1','thinkphp','_multi'=-->true); 
// 把查询条件传入查询方法 
$User->where($map)->select(); 
?>

'_multi'=>true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp',

<!--?php 
$User = M("User"); // 实例化User对象 
$map['id'] = array('neq',1); $map['name'] = 'ok'; $map['_string'] = 'status=1 AND score-->10'; $User->where($map)->select(); 
?>

最后得到的查询条件就成了:

<!--?php 
$map['id'] = array('gt','100'); 
$map['_query'] = 'status=1&score=100&_logic=or'; 
?-->

得到的查询条件是:

<!--?php 
$where['name'] = array('like', '%thinkphp%'); 
$where['title'] = array('like','%thinkphp%'); 
$where['_logic'] = 'or'; 
$map['_complex'] = $where; 
$map['id'] = array('gt',1); 
?-->

查询条件是

<!--?php 
$Model = new Model() // 实例化一个model对象 没有对应任何数据表 
$Model--->query("select * from think_user where status=1"); 
?>

如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,而不管你的SQL语句是什么。

<!--?php 
$Model = new Model() // 实例化一个model对象 没有对应任何数据表 
$Model--->execute("update think_user set name='thinkPHP' where status=1"); 
?>

如果你当前采用了分布式数据库,并且设置了读写分离的话,execute方法始终是在写服务器执行,因此execute方法对应的都是写操作,而不管你的SQL语句是什么。

<!--?php 
$user = $User--->getByName('liu21st'); 
$user = $User->getByEmail('liu21st@gmail.com'); 
$user = $User->getByAddress('中国深圳'); 
?>

暂时不支持多数据字段的动态查询方法,请使用find方法和select方法进行查询。

希望本文所述对大家程序设计有所帮助。

路过

雷人

握手

鲜花

鸡蛋
返回顶部

平台简介

吾爱编程网:http://www.52pg.net/是IT技能学习交流平台,我们提供了丰富的移动端开发、php开发、web前端开发、android开发、Java开发、Python开发、大数据开发、区块链开发、人工智能开发以及html5等大量的实战视频教程资源。(如果我们有侵犯了您权益的资源请联系我们删除)

点击这里给我发消息|Archiver|手机版|小黑屋|站点地图|吾爱编程  |网站地图

Powered by Discuz! X3.2??? 2017-2020 Comsenz Inc.??吾爱编程网