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 相关文章推荐
ajax+php打造进度条 readyState各状态
Mar 20 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
php分页代码学习示例分享
Feb 20 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
php中动态修改ini配置
Oct 14 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
php类的扩展和继承用法实例
Jun 20 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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 注释规范
2012/03/29 PHP
PHP Directory 函数的详解
2013/03/07 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHP小技巧之函数重载
2014/06/02 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python相似模块用例
2016/03/04 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Python 实现进度条的六种方式
2021/01/06 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
迟到早退检讨书
2014/02/10 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
考察邀请函范文
2015/01/31 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
讲解MySQL增删改操作
2022/05/06 MySQL