特别喜欢 ThinkPHP_3.2.3 框架的Model,结合官方手册及查看源代码,汇总出其大体用法:

核心转换方法:

$this->parseWhere($where);
$whereStr .= $this->parseThinkWhere($key, $val);
$this->parseWhereItem($this->parseKey($key), $val);

// 内连接、左连接、右连接 UserModel.class.php
// SQL:( SELECT * FROM sg_user u LEFTJOIN sg_user_field uf on u.userId=uf.userId WHERE ( u.userId = 1 ) )
$list = $this->alias('u')->join('__USER_FIELD__ uf on u.userId=uf.userId', 'LEFT')->where($where)->buildSql();
$list = $this->table('__USER__u')->join('__USER_FIELD__ uf on u.userId=uf.userId', 'LEFT')->where($where)->buildSql();

单词缩写:

e(=):equal  ;   n:not  ;  gt(>):greater than  ;  lt(<):lower than

where查询条件汇总:

<?php
$where = array(
'_logic' => 'and', 'or', 'xor',
array( // 注:跟 '_complex' 功能一样
'name' => '名称',
'title' => '标题'
),
'_complex' => array(
'name' => '名称',
'title' => '标题'
),
'_string' => "name='52php.cnblogs.com' AND title='cnblogs'",
'_query' => "_logic=AND&name=52php.cnblogs.com&title=cnblogs", //------------------------------------------------- 'name|title|nickname' => '名称',
'name|title|nickname' => array(
'_multi' => 1,
'名称',
'标题',
'昵称'
),
'name&title&nickname' => '名称',
'name&title&nickname' => array(
'_multi' => 1,
'名称',
'标题',
'昵称'
), //------------------------------------------------- 'name' => '52php.cnblogs.com', // 表达式查询
'name' => array('like', '52php.cnblogs.com%'),
'name' => array('like', array('%52php.cnblogs.com%', '%sg'), 'or'), 'name' => array('notlike', '52php.cnblogs.com%'),
'name' => array('notlike', array('%52php.cnblogs.com%', '%sg'), 'or'), 'id' => array('eq|neq|gt|egt|lt|elt', 28), 'id' => array('exp', 'IN (2,3,4)'), 'id' => array('in|not in', '(2,3,4)', 'exp'),
'id' => array('in|not in', '2,3,4'),
'id' => array('in|not in', array(2,3,4)), 'id' => array('between', '1,8'),
'id' => array('between', array(1,8)), // 区间查询
'id' => array(array('neq', 6), array('gt', 3), 'and'),
'id' => array(array('neq', 6), array('gt', 3), array('and')),
'id' => array(array('exp', 'in(2,3,4)'), array('gt', 3), 'and'),
  'id' => array(array('in', array(2,3,4)), array('eq', ''), 'or')
);

Where 条件中使用表达式

这里说的表达式,是指 ThinkPHP 框架中特有的表达式。这些表达式用于查询或更新删除等操作的 where条件 及模板标签中。

Where 条件表达式格式为:

$where['字段名']  = array('表达式', '操作条件');

其中 $map 是一个普通的数组变量,可以根据自己需求而命名。上述格式中的表达式实际是运算符的意义:

ThinkPHP运算符 与 SQL运算符 对照表

TP运算符 SQL运算符 例子 实际查询条件
eq = $where['id'] = array('eq',100); 等效于:$where['id'] = 100;
neq != $where['id'] = array('neq',100); id != 100
gt > $where['id'] = array('gt',100); id > 100
egt >= $where['id'] = array('egt',100); id >= 100
lt < $where['id'] = array('lt',100); id < 100
elt <= $where['id'] = array('elt',100); id <= 100
like like $where['username'] = array('like','Admin%'); username like 'Admin%'
between between and $where['id'] = array('between','1,8'); id BETWEEN 1 AND 8
not between not between and $where['id'] = array('not between','1,8'); id NOT BETWEEN 1 AND 8
in in $where['id'] = array('in','1,5,8'); id in(1,5,8)
not in not in $where['id'] = array('not in','1,5,8'); id not in(1,5,8)
and(默认) and $where['id'] = array(array('gt',1),array('lt',10)); (id > 1) AND (id < 10)
or or $where['id'] = array(array('gt',3),array('lt',10), 'or'); (id > 3) OR (id < 10)
xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0
exp 综合表达式 $where['id'] = array('exp','in(1,3,8)'); $where['id'] = array('in','1,3,8');

MySQL where条件表达式运算符参见:《MySQL WHERE 条件》。

补充说明

  • 同 SQL 一样,ThinkPHP运算符不区分大小写,eq 与 EQ 一样。
  • between、 in 条件支持字符串或者数组,即下面两种写法是等效的:
$where['id']  = array('not in','1,5,8');
$where['id'] = array('not in',array('1','5','8'));

exp 表达式

上表中的 exp 不是一个运算符,而是一个综合表达式以支持更复杂的条件设置。exp 的操作条件不会被当成字符串,可以使用任何 SQL 支持的语法,包括使用函数和字段名称。
exp 不仅用于 where 条件,也可以用于数据更新,如:

$Dao = M("Article");

// 构建 save 的数据数组,文章点击数+1
$data['aid'] = 10;
$data['counter'] = array('exp','counter+1'); // 根据条件保存修改的数据
$User->save($data);

ThinkPHP 模型方法 getField() 和 select() 使用技巧

ThinkPHP 模型方法 setInc() 和 setDec() 使用详解

#ThinkPHP_3.2.2模型# where查询条件汇总的更多相关文章

  1. 潭州课堂25班:Ph201805201 django框架 第六课 模型类增删改查,常用 的查询矣查询条件 (课堂笔记)

    在视图函数中写入增删改查的方法 增: 在 urls 中配置路径 : 查: 1: 在后台打印数据 在模型类中添加格式化输出 : QuerySet,反回的是个对象,可以按索引聚会,用 for 循环,, 找 ...

  2. django学习-15.ORM查询方法汇总

    1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...

  3. Thinkphp分页时查询条件保存方法

    web应用中经常要根据用户提交的查询条件进行过滤,再以列表方式显示在浏览器上.如果这种查询是多种条件的组合,并要进行分页显示,则如何在分页导航中保持查询条件,是必须解决的问题. 在Thinkphp中, ...

  4. django ORM常用查询条件

    假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...

  5. 各种SQL查询技巧汇总 (转)

    原文地址: https://blog.csdn.net/tim_phper/article/details/54963828 select select * from student; all 查询所 ...

  6. Thinkphp5.0 的使用模型Model查询

    Thinkphp5.0 的使用模型Model查询 一.查询多条记录 获取多个数据可以使用:select()方法和all()方法. 示例一:使用all()方法. //(1)筛选条件使用闭包函数 $res ...

  7. 67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time

    模型的定义,models.py文件中示例代码如下: from django.db import models # 在定义模型的类时,一定要继承models.Model class Category(m ...

  8. 循序渐进VUE+Element 前端应用开发(29)--- 高级查询条件的界面设计

    在系统模块中的业务列表展示里面,一般我们都会在列表中放置一些查询条件,如果是表字段不多,大多数情况下,放置的条件有十个八个就可以了,如果是字段很多,而这些条件信息也很关键的时候,就可能放置很多条件,但 ...

  9. Entity Framework 6 Recipes 2nd Edition(13-1)译 -> 优化TPT继承模型的查询

    问题 你想提高在一个TPT继承模型里的查询 解决方案 让我们假设有一个简单的TPT继承模型,如图Figure 13-1 Figure 13-1. A simple Table per Type inh ...

随机推荐

  1. [转]ASP.NET Core 中的那些认证中间件及一些重要知识点

    本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系 ...

  2. 深入SpringMVC

    一.如何让一个普通类成为Controller? 方案一:实现接口Controller 解析:handleRequest(request,response) 方案二:继承AbstractControll ...

  3. 【repost】JavaScript Scoping and Hoisting

    JavaScript Scoping and Hoisting Do you know what value will be alerted if the following is executed ...

  4. Git开发分支管理

    远程仓库有master和dev分支的情况 1. 克隆代码 git clone https://somewhere.com/master-dev.git 2. 查看所有分支 git branch --a ...

  5. rxjs5.X系列 —— filter系列 api 笔记

    欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第二篇 -- filter转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxjs官 ...

  6. 编写轻量ajax组件01-对比webform平台上的各种实现方式

    前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...

  7. [EF2]Sneak Preview: Persistence Ignorance and POCO in Entity Framework 4.0

    http://blogs.msdn.com/b/adonet/archive/2009/05/11/sneak-preview-persistence-ignorance-and-poco-in-en ...

  8. 学写js Calender控件

    好几个月没写博客了,一直在赶项目.项目现在终于处于稳定的状态,只是修修改改.作为后台程序员的我真是苦逼啊,从web到手机端接口我都得写,杂七杂八的事情...这两天终于闲下来了,没事儿看了一下关于js日 ...

  9. 【MySQL】mysql分页调用

    存储过程: CREATE DEFINER=`root`@`%` PROCEDURE `Proc_PageCondition`(p_cloumns varchar(500), p_tables varc ...

  10. python学习之路 第五天

    1.装饰器: #!/usr/bin/env python3 user_status = False #用户登录了就把这个改成True def login(auth_type): #把要执行的模块从这里 ...