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 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
PHP的开合式多级菜单程序
Oct 09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
php 魔术方法使用说明
Oct 20 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 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中安装Apache2和PHP4权威指南
2006/11/18 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
python使用post提交数据到远程url的方法
2015/04/29 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
关爱女孩行动实施方案
2014/03/13 职场文书
投资协议书范本
2014/04/21 职场文书
学校安全管理责任书
2014/07/23 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
大学生简短的自我评价
2014/09/12 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏