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 相关文章推荐
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
图书管理程序(三)
Oct 09 PHP
构建简单的Webmail系统
Oct 09 PHP
PHP经典的给图片加水印程序
Dec 06 PHP
由php if 想到的些问题
Mar 22 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
Yii学习总结之安装配置
Feb 22 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
CI配置多数据库访问的方法
Mar 28 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
PHP获取访问设备信息的方法示例
Feb 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
PHP个人网站架设连环讲(一)
2006/10/09 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
Python 判断奇数偶数的方法
2018/12/20 Python
python 自动批量打开网页的示例
2019/02/21 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
Python socket聊天脚本代码实例
2020/01/02 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
PyQt5实现简单的计算器
2020/05/30 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
技术人员面试提纲
2013/11/28 职场文书
小学母亲节活动方案
2014/03/14 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
明星邀请函
2015/02/02 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫