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 insert语法详解
Jun 07 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
PHP函数常用用法小结
Feb 08 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
解析PHP计算页面执行时间的实现代码
Jun 18 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
php猜单词游戏
Sep 29 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
浅谈php常用的7大框架的优缺点
Jul 20 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
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python3.3实现乘法表示例
2014/02/07 Python
Python的类实例属性访问规则探讨
2015/01/30 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Flask配置Cors跨域的实现
2019/07/12 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
PHP经典面试题
2016/09/03 面试题
应届生妇产科护士求职信
2013/10/27 职场文书
采购意向书范本
2014/03/31 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
学生检讨书怎么写
2014/10/09 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
开学第一天的感想
2015/08/10 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
golang的文件创建及读写操作
2022/04/14 Golang