thinkPHP5框架闭包函数与子查询传参用法示例


Posted in PHP onAugust 02, 2018

本文实例讲述了thinkPHP5框架闭包函数用法。分享给大家供大家参考,具体如下:

普通使用

举个栗子:

$this->where(function ($query)
{
 $query->where('id', 1)->whereor('id', 2);
})->find();

上述栗子就是一个简单的where查询的闭包函数使用,使用匿名函数添加复杂条件查询,

最后执行的sql是:

// 加入上述代码写在user模型里,则执行的sql为:
select * from user where (id = 1 or id = 2);

复杂用法

其实闭包函数也不会复杂到哪去,无非带参数不带参数而已。举个栗子(上面的栗子加强下)

$this->where(function ($query) use ($id1, $id2)
{
 $query->where('id', $id1)->whereor('id', $id2);
})->find();

这也就是thinkphp 5 里怎么使用闭包查询传参数的方法,使用use 传入参数。

tp5闭包子查询传参方法

在channel表中查询status,channel_id,channel_name,account_level这些字段,且这些字段的channel_id不在adv_id为$id的表adv_channel_rule中:

$model = new Model();
$id = $req_models["id"];

tp5闭包子查询传参:

$res = $model->table('channel')
  ->field(['status','channel_id','channel_name','account_level'])
  ->where('channel_id','NOT IN',function($query) use ($id) {
 $query->table('adv_channel_rule')->where("adv_id",$id)->field('channel_id');
  })->select();

mysql的原生写法:

$res = 'SELECT adv_id,adv_name,status,account_level FROM `channel` WHERE channel_id NOT IN (SELECT channel_id FROM adv_channel_rule WHERE adv_id='.$id.')';
$result = $model->query($res);

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
php抽奖小程序的实现代码
Jun 18 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
PHP查询快递信息的方法
Mar 07 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
PHP操作Redis常用命令的实例详解
Dec 23 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 #PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 #PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 #PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 #PHP
PHP实现的分解质因数操作示例
Aug 01 #PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 #PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 #PHP
You might like
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
把77A收信机改造成收音机
2021/03/02 无线电
程序员编程十条戒律
2009/07/09 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
关于PHP开发的9条建议
2015/07/27 PHP
js右键菜单效果代码
2007/07/21 Javascript
js里的prototype使用示例
2010/11/19 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
Python中的进程分支fork和exec详解
2015/04/11 Python
python实现SMTP邮件发送功能
2020/06/16 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python命令 -u参数用法解析
2019/10/24 Python
Python3监控疫情的完整代码
2020/02/20 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
什么是属性访问器
2015/10/26 面试题
汽修专业学生自我鉴定
2013/11/16 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
走群众路线学习笔记
2014/11/06 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
浅谈Python协程asyncio
2021/06/20 Python
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
MySQL分区表管理命令汇总
2022/03/21 MySQL