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连接mysql数据库代码
Mar 10 PHP
php jquery 实现新闻标签分类与无刷新分页
Dec 18 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
THINKPHP5.1 Config的配置与获取详解
Jun 08 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
PHP的自定义模板引擎
2017/03/24 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
python 重命名轴索引的方法
2018/11/10 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
python assert的用处示例详解
2019/04/01 Python
pandas中的series数据类型详解
2019/07/06 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
高中毕业生生活的自我评价
2013/12/08 职场文书
会计专业导师推荐信
2014/03/08 职场文书
临床医师个人自我评价
2014/04/06 职场文书
民政局个人整改措施
2014/09/24 职场文书
团结友爱主题班会
2015/08/13 职场文书
导游词之西安骊山
2019/12/03 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python