laravel中的where和orwhere的源码分析
一、背景
博主在写sql
的时候,遇到了要用orwhere
的情况,关键这个orwhere
的条件是一个数组,就是要用orwhereIn
的方法来写。。反正在这之前博主是一直不知道, 竟然还有orWhereIn
的方法,反正是实现了需求。不过越想越不舒服,不能放任这种不明代码不管,所以索性研究下DB的源码部分
二、关于DB的源码
laravel的DB源码是在:
//这个文件夹下封装着对应的DB源码
\vendor\laravel\framework\src\Illuminate\Database
1、关于数据库增删改查部分的源码位置
\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars
这个文件下下面有几个文件,大家打开就能看到封装好的方法,例如:
protected $selectComponents = ['aggregate','columns','from','joins','wheres','groups','havings','orders','limit','offset','unions','lock',];
2、关于数据库连接,排序部分的源码
\vendor\laravel\framework\src\Illuminate\Database\Query
//文件下有个builder文件,里面封装的就是我们要找的表连接操作的封装
public $bindings = ['select' => [],'join' => [],'where' => [],'having' => [],'order' => [],'union' => [],];
在这个文件看了下,普通的where
条件查询,最后传给数据库实例的是:
这里我们能看到,最后传的是原生的and
.
而对于orwhere
,最后传递的是or
:
然后大家再看一看其他的方法就发现了,凡事能用and
的,都有与之对应的or
操作,也就是说,什么orwhereIn
啊,orWhereNotIn
,wherenull
,orWhereNull
全部都是封装好的,我们直接用就好了,本质上只是最后传递给实例的and
和or
参数不同而已。
到这里博主也算是搞懂了自己想要知道的问题,说到底还是没有好好的看laravel的源码,很多方法人家都是封装好的,但是你不知道,那你注定不会用。加油。
end
laravel中的where和orwhere的源码分析相关推荐
- Linux中mknod命令实现原理以及源码分析
本篇文章以mknod创建字符设备文件进行讲解 字符设备驱动的Demo例子可参考该篇文章 Linux 编写简单驱动并测试 1. mknod 命令 mknod /dev/hello c 520 0 该命令 ...
- java中的==、equals()、hashCode()源码分析(转载)
在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. == java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...
- LinkedList中查询(contains)和删除(remove)源码分析
一.contains源码分析 本文分析双向链表LinkedList的查询操作源码实现.jdk中源程序中,LinkedList的查询操作,通过contains(Object o)函数实现.具体见下面两部 ...
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] good
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
- 线程中task取消_Rust Async: async-task源码分析
async-std是rust异步生态中的基础运行时库之一,核心理念是合理的性能 + 用户友好的api体验.经过几个月密集的开发,前些天已经发布1.0稳定版本.因此是时候来一次深入的底层源码分析.asy ...
- Java并发包中Semaphore的工作原理、源码分析及使用示例
简介: 在多线程程序设计中有三个同步工具需要我们掌握,分别是Semaphore(信号量),countDownLatch(倒计数门闸锁),CyclicBarrier(可重用栅栏) 欢迎探讨,如有错误敬请 ...
- Android研发中对String的思考(源码分析)
1.常用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是执行了三件事 1.声明变量 String text; 2. ...
- 集合的get方法中参数从多少开始_源码分析CopyOnWriteArrayList 中的隐藏知识,你Get了吗?...
欢迎点击 "未读代码" ,关注公众号,文章每周更新 杭州-阿里园区墙 前言 本觉 CopyOnWriteArrayList 过于简单,寻思看名字就能知道内部的实现逻辑,所以没有写这 ...
最新文章
- swift基础--变量
- 【转】一个Java程序员应该掌握的10项技能
- 如何学好C、C++------思维方式的转变
- 微信小程序align_微信小程序四色花瓣
- c语言如何判断数据是否符合正态分布_如何判断机器学习数据集是否是线性的?...
- 《Python Cookbook 3rd》笔记(2.7):最短匹配模式
- 值得思考,机器学习模型做出的决策是你想要的吗?
- ResNet、Faster RCNN、Mask RCNN 是专利算法吗?盘点何恺明参与发明的专利!
- 数据仓库中的两大经典模型
- c# 后台传到前台乱码_ASP.NET关于前台脚本传递中文参数,后台获取乱码问题(乱码为方框,黑色方框等。。)...
- Linux常用50条命令
- 最近邻插值算法 python实现
- oracle 负载均衡连接方式常用SQL语句备忘录
- AnyMP4 MP3 Converter for Mac(mp3格式转换器)
- 2021年电工(技师)考试内容及电工(技师)复审考试
- opendir readdir
- 2015 Visual-lidar Odometry and Mapping:Low-drift,Robust,and Fast
- 一段真实在个人经历, 给那些迷失方向的朋友[转帖]
- 讲解后台管理系统之列表设计分享
- 六成受访美国人认为教育系统正在令这一代人失望
热门文章
- 12层打败50层,ParNet 普林斯顿+英特尔:更深不一定更好
- yolov5 soft_nms cluster_nms,cluster_SPM_nms,cluster_diounms,cluster_SPM_dist_nms,diou_nms
- 模型大小 与参数量计算
- error C2061: 语法错误: 标识符“std”
- 目标跟踪数据集OTB、VOT下载
- missing template arguments before异常解决
- 傅里叶变换时间复杂度
- OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
- matlab 摄像头操作
- 什么是mini GBIC,mini GBIC与SFP光模块有什么区别?