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 相关文章推荐
phpmyadmin的#1251问题
Nov 25 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
提高php运行速度的一些小技巧分享
Jul 03 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
关于laravel后台模板laravel-admin select框的使用详解
Oct 03 PHP
PHP使用openssl扩展实现加解密方法示例
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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php中使用GD库做验证码
2016/03/31 PHP
php文件上传的两种实现方法
2016/04/04 PHP
jquery attr 设定src中含有&(宏)符号问题的解决方法
2011/07/26 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
在Python中处理XML的教程
2015/04/29 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
最新的咖啡店创业计划书
2013/12/30 职场文书
干部培训自我鉴定
2014/01/22 职场文书
七年级生物教学反思
2014/01/30 职场文书
元旦趣味活动方案
2014/08/22 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
初婚未育证明样本
2015/06/18 职场文书
初一数学教学反思
2016/02/17 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android