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 相关文章推荐
一个目录遍历函数
Oct 09 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
9个PHP开发常用功能函数小结
Jul 15 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
php过滤XSS攻击的函数
Nov 12 PHP
PHP命名空间和自动加载类
Apr 03 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
yii框架搜索分页modle写法
Dec 19 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
PHP CURL使用详解
Mar 21 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中header的用法详解
2013/06/07 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
js DOM的学习笔记
2011/12/22 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
Vue实现简单分页器
2018/12/29 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
Vue快速实现通用表单验证功能
2019/12/05 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
详解python中requirements.txt的一切
2017/03/03 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
中学自我评价
2014/01/31 职场文书
会计专业求职信范文
2014/03/16 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
MySQL中varchar和char类型的区别
2021/11/17 MySQL
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server