关于thinkphp6 where以数组形式查询,其中有or,and的处理

hykeda2年前ThinkPHP1607

最近在写tp6的查询语句时,如果查询条件以数组形式传入,比如:

$where[] = ['id','=',$id];
$where[] = ['openid','=',$openid];
$where[] = ['mobile','=',$mobile];
$model->where($where)->find();

这样的写法,sql语句时用and相连的。但是现在如果需要有用到or的话,可以使用whereOr

但是如果是另个字段,同时等于一个值,并且是or,那么要这样写:

$where[] = ['openid|mobile','=',‘kkkkkkkkkkk’];

这样生成的sql是:id=1 and (openid=‘kkkkkkkkk’or mobile=‘kkkkkkkkk)。

但是现在我想要生成的sql是这样的:id=1 and (openid = 'asdfasdfasdfasdfasdf' or mobile='13333333333')。

以前用tp可以写成:

$where[] = [['openid','=',‘asdfasdfasdfasdfasdf’],['mobile','=',‘13333333333’],or];

但是现在这种写法tp6已经不支持了,现在必须用闭包的写法来实现:

新创建一个$map的变量:

$where[] = ['id','=',$id];
$map[] = ['openid','=',$openid];
$map[] = ['mobile','=',$mobile];
$model->where($where)->where(function($query) use ($map){
    $query->whereOr($map);
})->find();

这样写就能实现上面所说的sql语句

相关文章

关于thinkphp5.1钩子和行为的个人理解和使用

关于thinkphp5.1钩子和行为的个人理解和使用

thinkphp5中的钩子和行为属于AOP编程思想,类似于AOP编程中的“切面”的概念,简单理解就是一个切入点,可以大大增加程序的耦合性。如何使用钩子和行为来开发:首先在项目中创建一个行为文件夹:1、...

composer安装插件包的时候提示PHP 版本不匹配

因为安装的 PHP 是 8.0 ,不匹配 composer.json 要求的版本,所以使用 composer 进行安装时会报错。在安装命令后加上 --ignore-pla...

Thinkphp5 记录点,注意点

json对象转成数组 先用$flag->getContent() $flag = json_decode($flag->getContent(),true); 控制器: 1、当控制器...

thinkphp6 中间件使用笔记

最近开发三频道打通程序时用到了中间件,现总结一下:第一步:首先用命令行生成中间件php think make:middleware Check这个指令会 app...

Thinkphp6中在构造函数中返回json数据

return json($arr)->send();如果直接在构造函数中使用return json()是不会返回json格式的数据的。必须调用send方法。...

Thinkphp5 创建模块

一、创建三个模块 Common(公共模块),Index(前台模块),Admin(后台模块)。 index.php实际配置 <?php // 定义应用目录 define('APP_...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。