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 strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
PHP数组交集的优化代码分析
Mar 06 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
php数组去重实例及分析
Nov 26 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
php绘制一个矩形的方法
Jan 24 PHP
php常用正则函数实例小结
Dec 29 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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/09/01 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
javascript动态加载三
2012/08/22 Javascript
js星星评分效果
2014/07/24 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
JS FormData对象使用方法实例详解
2020/02/12 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
python tkinter界面居中显示的方法
2018/10/11 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
英文版餐饮业求职信
2013/10/18 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
个人现实表现材料
2014/02/04 职场文书
2014年党务公开方案
2014/05/08 职场文书
幼儿发展评估方案
2014/06/11 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
2016年十一促销广告语
2016/01/28 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Python if else条件语句形式详解
2022/03/24 Python