ThinkPHP5 高级查询之构建分组条件

一、在tp5中通过where方法如何构建分组条件,

例如:
where user_id=$this->user_id and (status in (4,5,7) or refund_status = 2)
该如何构建?

1、通过闭包查询:

//1、通过闭包查询
$sql = Db::name('order')
->where('user_id',$this->user_id)
->where(function ($query){
$query->where('status','in',[4,5,7])
->whereOr('refund_status',2);
})
->select(false);

把生成的sql语句打印出来:

 string(99) "SELECT * FROM `cjd_order` WHERE `user_id` = 8 AND ( `status` IN (4,5,7) OR `refund_status` = 2 )"

2、where里直接写原生:

 //2、直接where写原生
$sql = Db::name('order')
->where('user_id = '.$this->user_id.'and (status in (4,5,7) or refund_status = 2)')
->select(false);

把生成的sql语句打印出来:

 string(99) "SELECT * FROM `cjd_order` WHERE `user_id` = 8 AND ( `status` IN (4,5,7) OR `refund_status` = 2 )"

通过对比,我们发现,两种方法生成的sql语句是一样的,不过第二种方式比较简单粗暴,必要时候还是挺好用的,^><^

也可查看tp5手册高级查询部分:tp5高级查询

二、如何查询模型中的字段作为查询条件

在使用tp5模型中,无论是一对一还是一对多,如果遇到将主表的字段作为查询条件的时候是很普通的,比如直接这样写就OK了

     /**
* 功能:商品券分配情况列表
*
* User: cyf
* Time: 2018/12/15 0015 17:15
*/
public function get_list($whereOr,$where,$query)
{
return $this->with('shop')
->whereOr($whereOr)
->where($where)
->order('update_time desc')
->paginate(10,false,$query);
}

但是如果再加上利用模型的中的字段作为查询条件的话,就复杂了,这时候tp5 的haswhere就派上用场了

     public function get_list($whereOr,$where,$query)
{
return $this
->hasWhere('shop',$whereOr)
->where($where)
->order('update_time desc')
->paginate(10,false,$query);
}

注意:1、此时,with()写不写都行,如果写的话,要写在haswhere()之后,haswhere()一定是最前面

三、find_in_set()的用法

在维护推荐关系过程中,除了要存父级pid之外,一般还会记录一个path字段

还是直接看代码:

 $user_enhance_model = new \app\common\model\UserEnhance();
$list = $user_enhance_model
->where("find_in_set($cate_id,category_ids)")
->field('id,user_id,min_price,max_price,consult_num,title')
->order('user_id asc')
->select();

关于find_in_set函数的具体用法,请移步:(还没写)

ThinkPHP5 高级查询之构建分组条件的更多相关文章

  1. 【2017-03-10】Tsql语句基础、条件,高级查询

    一.语句基础 1.创建数据库:create database 数据库名(不能汉字,不能数字.符号开头) 2.删除数据库:drop database 数据库名 3.选用数据库:use 数据库名 4.创建 ...

  2. python进阶09 MySQL高级查询

    python进阶09 MySQL高级查询 一.筛选条件 # 比较运算符 # 等于:= 不等于:!= 或<> 大于:> 小于:< 大于等于>= 小于等于:<= #空: ...

  3. [转]Laravel 数据库实例教程 —— 使用查询构建器实现对数据库的高级查询

    本文转自:https://laravelacademy.org/post/920.html 上一节我们简单介绍了如何使用查询构建器对数据库进行基本的增删改查操作,这一节我们来探讨如何使用查询构建器实现 ...

  4. SolrNet高级用法(分页、Facet查询、任意分组)

    前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...

  5. 数据库中的T-sql语句 条件修改 高级查询

    1.创建数据库:create database --数据库名,不能中文,不能数字开头,不能符号开头 2.删除数据库:drop database-- 数据库名 use student--使用数据库 3. ...

  6. 【2017-03-10】T-sql基础语句及条件,高级查询

    一.T-sql基础语句 1.创建数据库:create database 数据库名  (不能中文,不能数字开头,不能符号开头) 2.删除数据库:drop database 数据库名 3.选择数据库:us ...

  7. java整合Elasticsearch,实现crud以及高级查询的分页,范围,排序功能,泰文分词器的使用,分组,最大,最小,平均值,以及自动补全功能

    //为index创建mapping,index相当于mysql的数据库,数据库里的表也要给各个字段创建类型,所以index也要给字段事先设置好类型: 使用postMan或者其他工具创建:(此处我使用p ...

  8. jqgrid 表格中筛选条件的多选下拉,树形下拉 ;文本框清除插件;高级查询多条件动态筛选插件[自主开发]

    /** * @@desc 文本框清除按钮,如果isAutoWrap为false当前文本框父级必须是relative定位,boostrap参考input-group * @@author Bear.Ti ...

  9. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

随机推荐

  1. render函数和redirect函数的区别+反向解析

    render函数和redirect函数的区别+反向解析 1.视图函数:一定是要包含两个对象的(render源码里面有HttpResponse对象)   request对象:----->所有的请求 ...

  2. 牛客假日团队赛2 C.修围栏

    链接: https://ac.nowcoder.com/acm/contest/924/C 题意: 农民 John 希望修复围绕农场的一小段围栏.他测量了一下,发现需要N (1 <= N < ...

  3. HDU-3072-IntelligenceSystem(tarjan,贪心)

    链接:https://vjudge.net/problem/HDU-3072 题意: 给你n个点,1个点到另一个点连接花费c,但是如果几个点可以相互可达,则这几个点连通花费为0. 求将整个图连通的最小 ...

  4. Hive进阶_Hive数据的导入

    使用Load语句执行数据的导入 语法: load data [local] inpath 'filepath' [overwrite] into table tablename [partition ...

  5. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  6. (转)useradd用户,组管理案例

    原文:https://www.cnblogs.com/Csir/p/6403830.html?utm_source=itdadao&utm_medium=referral 示例:要求oldbo ...

  7. 5. 把一幅彩色图像的H、S、I分量单独显示。

    #include <cv.h> #include <highgui.h> # include <math.h> #define M_PI 3.1415 void R ...

  8. Java输入输出流简单案例

    package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...

  9. webpack.config.js====entry入口文件的配置

    1.  一般是采用对象语法: entry: { index: './src/default/js/index.js' }, https://webpack.css88.com/concepts/ent ...

  10. CA、公钥、私钥 概要

    CA.公钥.私钥 概要 现在在开发中遇到一个需求,需要使用tls加密技术,之前并没有了解过,这里来做一个关于CA,公钥,密钥的总结,至于怎么生成这儿就不讲了,如果有机会可以再开一个单章来讲一下. 现在 ...