3分钟短文 ! Laravel拼装SQL子查询的最佳实现
时间:2022-07-22
本文章向大家介绍3分钟短文 ! Laravel拼装SQL子查询的最佳实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学习时间
对于数据库DBA可能更习惯从SQL的角度出发,从SQL现有的语言结构和功能上解决问题。比如查询一个product表,要求查询条件中,product_catagory 表的某些字段存在才能才回。
写多了容易无解,直接上SQL:
大家注意那个 IN 子句,其实是一个查询结果集,从另个表返回的。
写SQL真的很伤神,不如用框架自带的orm,操作起来非常人性化,拼装也很简单。那就抛出一个问题,Laravel如何实现上述的子查询?
对Laravel来说,简直不要太简单,你只要在写whereIn的时候,将数组使用闭包返回就可以了。代码像这么写:
Products::whereIn('id', function($query){
$query->select('paper_type_id')
->from(with(new ProductCategory)->getTable())
->whereIn('category_id', ['223', '15'])
->where('active', 1);
})->get();
注意外层是
Products::whereIn('id', array(...))->get();
然后我们需要定制的 array,用于包裹返回值数据,那么直接用闭包就是。
$query->select('paper_type_id')->from(TABLE_NAME)->whereIn('category_id', ['223', '15'])->where('active', 1);
也是极为寻常的一条语句。注意from就是表名。我们可以使用方法将其返回,注意是字符串类型:
with(new ProductCategory)->getTable()
这一句要求你的 Products 模型内定义了关联模型,上一句不过是获取 product_catagory 这个表名的字符串。
不止一个方法
解决问题的方法永远不止一个,在Laravel中你还可以不像上一节那样,虽然很明确,写的很标准,可是并不是所有开发者都能达到那样的熟练度。
我们说说通用的,一般开发者所能想到的一些方法。比如获取关联表名那一段,改为手动指定表名,指定列名:
DB::table('users')
->whereIn('id', function($query)
{
$query->select(DB::raw('paper_type_id as blablabla'))
->from('product_catagory')
->whereIn('id', array(...))
->where('active', 1);
})
->get();
这样使用 DB::raw,还有 whereRaw 方法,你几乎就是在写原生的SQL语句了。比较直观。缺点是,不能复用,冗余代码多到令人发指。
写在最后
本文通过一个SQL语句查询在Laravel中的实现方式,解释了laravel在拼装SQL查询时的自由度,使用起来非常灵活。
对于固定的查询方式,或者经过优化的SQL语句,你大可直接发送给Laravel直接运行以便提高效率。
- 梯度是如何计算的
- Java 机器学习库Smile实战(二)AdaBoost
- 如何用excel urldecode解码把url编码转为汉字?
- Scikit-learn实战之 SVM回归分析、密度估计、异常点检测
- TensorFlow模拟简单线性模型小栗子
- web跨域解决方案
- Bootstrap幻灯轮播如何支持触屏左右滑动手势?
- JavaScript 调试小技巧
- 图片上传预览js
- Isolation Forest算法实现详解
- css继承样式怎么控制?用选择器
- wordpress站内搜索结果页URL伪静态如何操作
- 如何实现大图居中超过的部分两边自动隐藏
- Ubuntu16.04安装后开发环境配置和常用软件安装
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 第十五章 并发版爬虫第二版 -- 完结
- 第十六章 分布式爬虫--准备工作
- go 搭建并行处理管道
- 新一代基于大数据的管理信息系统(MIS)报表需求开发
- 3. docker-compose实战--ghost app
- 2.1 Kubernetes--Pod
- 3. Kubernetes集群安装
- macOS VirtualBox 桥接模式 设置静态ip 且能和联网
- 重新初始化k8s master节点
- 5.k8s基本命令汇总
- 6. k8s + jenkins 实现持续集成(完)
- 7. 复制k8s Node节点 并重新初始化k8s-nodes2节点 (k8s连载)
- 8.k8s连载--重新生成k8s token(kubeadm join报错及解决)
- 3. dcoker容器的命令
- 4. 镜像的原理