当前位置: 首页 > news >正文

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings);

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings);

1. 在laravel5使用join 子查询时

	$sub_query = DB::table('table1')->select(['table1.id', 'cate_id'])->join('table2', 'table1.id', '=', 'table2.id')->where('table1.cate_id', 2)->orderBy('table1.id');DB::table('cate as c')->join(DB::raw("({$sub_query->toSql()}) as t"), 'c.id', '=', 't.cate_id')->addBinding($sub_query->getBindings())->get();

打印sql

select * from cate as c inner join (select table1.id, cate_id from table1 inner join table2 on table1.id = table2.id where table1.cate_id = 2 order by table1.id asc) as t on c.id = t.cate_id;

2. 增加宏指令 joinSub

  Builder::macro('joinSub', function ($subQuery, $alias, $first, $operator = null, $second = null, $type = 'inner', $where = false) {if ($subQuery instanceof \Illuminate\Database\Eloquent\Builder || $subQuery instanceof Illuminate\Database\Query\Builder) {$sql = $subQuery->toSql();$bindings = $subQuery->getBindings();} elseif (is_string($subQuery)) {$sql = $subQuery;$bindings = [];} else {throw new \InvalidArgumentException('Invalid sub-query provided');}$joinClause = DB::raw("($sql) as $alias");return $this->join($joinClause, $first, $operator, $second, $type, $where)->addBinding($bindings);});

3. 使用joinSub()

$sub_query = DB::table('table1')->select(['table1.id','cate_id'])->join('table2', 'table1.id', '=', 'table2.id')->where('cate_id', 1)->orderBy('table1.id');DB::table('cate as c')->joinSub($sub_query, 't', 'c.id', '=', 't.cate_id')->get();

打印sql

select * from cate as c inner join (select table1.id, cate_id from table1 inner join table2 on table1.id = table2.id where cate_id = 1 order by table1.id asc) as t on c.id = t.cate_id;

http://www.lryc.cn/news/491540.html

相关文章:

  • 远程控制软件:探究云计算和人工智能的融合
  • 网络协议之DNS
  • .net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
  • QML学习 —— 28、3种等待指示控件(附源码)
  • flutter 专题十一 Fair原理篇Fair逻辑动态化架构设计与实现
  • 利用开源图床的技巧与实践
  • C++数据结构与算法
  • Paddle Inference部署推理(三)
  • python(四)os模块、sys模块
  • Oracle 数据库 IDENTITY 列
  • 【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法
  • 深入解密 K 均值聚类:从理论基础到 Python 实践
  • ArcGIS应用指南:ArcGIS制作局部放大地图
  • 非root用户安装CUDA
  • 单点修改,区间求和或区间询问最值(线段树)
  • 线性代数空间理解
  • Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
  • C51相关实验
  • docker离线安装linux部分问题整理
  • ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案
  • 递推概念和例题
  • 开发工具 - VSCode 快捷键
  • 数据库的联合查询
  • 【人工智能】基于PyTorch的深度强化学习入门:从DQN到PPO的实现与解析
  • 【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程
  • CentOS环境上离线安装python3及相关包
  • 学习threejs,使用设置bumpMap凹凸贴图创建褶皱,实现贴图厚度效果
  • React表单联动
  • 408数据结构:栈、队列和数组选择题做题笔记
  • sql工具!好用!爱用!