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 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php数组一对一替换实现代码
Aug 31 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
用php守护另一个php进程的例子
Feb 13 PHP
Laravel5中contracts详解
Mar 02 PHP
php实现ip白名单黑名单功能
Mar 12 PHP
PHP实现批量上传单个文件
Dec 29 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 PHP
laravel与thinkphp之间的区别与优缺点
Mar 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
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
深入浅出php socket编程
2015/05/13 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
python开发之for循环操作实例详解
2015/11/12 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python 常用string函数详解
2016/05/30 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
专科毕业生就业推荐信
2013/11/01 职场文书
工厂厂长岗位职责
2013/11/08 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
中学社团活动总结
2015/05/07 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
canvas绘制折线路径动画实现
2021/05/12 Javascript
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫