知识改变世界
生活可以更简单
注册 登录
***文章***

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

作者:xiaofeng 类型:转载 时间:2017-08-02

一、介绍

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

二、查询方式

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

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

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

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

最后生成的SQL语句是

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

最后生成的SQL语句是

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

最后生成的SQL语句是

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

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

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

四、快捷查询

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

查询条件就变成

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

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

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

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

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

得到的查询条件是:

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

查询条件是

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

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

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

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

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

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

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

***其他版块***

本站为编程爱好者提供计算机电子书免费资源下载,定期更新!

***其他***

更多内容,敬请期待!谢谢!!!