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 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
动态生成gif格式的图像要注意?
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php使用get_class_methods()函数获取分类的方法
Jul 20 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
php实现数字补零的方法总结
Sep 12 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php调用c接口无错版介绍
2014/03/11 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
详解Python的Django框架中的模版继承
2015/07/16 Python
python更新列表的方法
2015/07/28 Python
Python性能提升之延迟初始化
2016/12/04 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
在Python中使用Neo4j的方法
2019/03/14 Python
PyQt5实现简易计算器
2020/05/30 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
解除财产保全担保书
2014/05/20 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
小学数学国培研修日志
2015/11/13 职场文书