一、介绍 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方法进行查询。 希望本文所述对大家程序设计有所帮助。 |