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 相关文章推荐
实用函数3
Nov 08 PHP
解析php如何将日志写进syslog
Jun 28 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
PHP对象实例化单例方法
Jan 19 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP中PDO事务处理操作示例
May 02 PHP
laravel返回统一格式错误码问题
Nov 04 PHP
PHP文件打开关闭及读写操作示例解析
Aug 06 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代码优化及php相关问题总结
2006/10/09 PHP
改进的IP计数器
2006/10/09 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
详解angular element()方法使用
2017/04/08 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
python计算牛顿迭代多项式实例分析
2015/05/07 Python
python监控文件或目录变化
2016/06/07 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
python如何进入交互模式
2020/07/06 Python
python 制作简单的音乐播放器
2020/11/25 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
法律专业应届生自荐信范文
2014/01/06 职场文书
导航工程专业自荐信
2014/09/02 职场文书
故意伤害辩护词
2015/05/21 职场文书
运动会800米赞词
2015/07/22 职场文书
早安问候语大全
2015/11/10 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
如何在python中实现ECDSA你知道吗
2021/11/23 Python
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs
关于Redis的主从复制及哨兵问题
2022/06/16 Redis