【TP5.1】whereOr的用法(双条件查询)

简介: 【TP5.1】whereOr的用法(双条件查询)

author:咔咔


wechat:fangkangfg


在平时的工作中,我们会遇到一些情况,比如;


最近我在写TP5.1的商城博客,里边就有一个这样的需求


一个条件是校验是否在角色权限里


一个条件就是需要校验的权限


image.png


这个时候就不知道sql怎么写了,最会看了一眼文档,发现里边有个whereOr方法


于是就对这个方法进行了封装


里边有三个参数


第一个是where查询条件


第二个查询字段


第三个就是双条件查询

image.png



 

public function query($where = '1 = 1', $field = '*', $whereOr = null)
      {
          if ($whereOr) { // 存在
              return Module::where($where)->field($field)->whereOr($whereOr)->order('pid,sort')->select()->toArray();
          } else { //
              return Module::where($where)->field($field)->order('pid,sort')->select()->toArray();
          }
      }

后续测试:

这个语句明显不是我们想要的

SELECT * FROM `tp_module` WHERE  `module_id` IN (120,121)  AND `module` = 1277 OR `module` = 1278  OR `is_control_auth` = 1279 ORDER BY `pid`,`sort` [ RunTime:0.002929s ]

这种的才是我们需要的


SELECT * FROM `tp_module` WHERE  ( `module_id` IN (120,121) AND `module` = 1277 ) OR ( `module` = 1278 AND `is_control_auth` = 1279 ) ORDER BY `pid`,`sort` [ RunTime:0.003906s ]

只需要给条件加上[]就欧克了


 

public function getModuleGroup($where = '1 = 1',$whereOr = null)
    {
        if($whereOr){
            return Module::where([$where])->whereOr([$whereOr])->order('pid,sort')->select()->toArray();
        }else{
            return Module::where($where)->order('pid,sort')->select()->toArray();
        }
    }


相关文章
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL-8】DQL-查询语句全解 [ 基础/条件/分组/排序/分页查询 ](附带代码演示&案例练习)
【MySQL-8】DQL-查询语句全解 [ 基础/条件/分组/排序/分页查询 ](附带代码演示&案例练习)
【TP5】在模板里边输出if写法
【TP5】在模板里边输出if写法
249 0
【TP5】在模板里边输出if写法
|
PHP 数据库
tp5查询指定字段
tp5查询指定字段
|
SQL 关系型数据库 MySQL
ES中如何实现类似having的先聚合再过滤查询
ES中如何实现类似having的先聚合再过滤查询
596 0
ES中如何实现类似having的先聚合再过滤查询
【TP5】关于模糊查询
【TP5】关于模糊查询
246 0
【TP5】关于模糊查询
|
中间件 容器
【TP5.1】配置解释大全
【TP5.1】配置解释大全
187 0
【TP5.1】配置解释大全
【TP5】查询返回结果
【TP5】查询返回结果
172 0
【TP5】查询返回结果
|
JSON 数据库 数据格式
【TP5】关于双表联查时json的条件没有对应上时不显示数据
【TP5】关于双表联查时json的条件没有对应上时不显示数据
121 0
【TP5】关于双表联查时json的条件没有对应上时不显示数据
【TP5】根据主键ID进行多条数据查询
【TP5】根据主键ID进行多条数据查询
363 0
【TP5】根据主键ID进行多条数据查询