一、背景

博主在写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啊,orWhereNotInwherenull,orWhereNull全部都是封装好的,我们直接用就好了,本质上只是最后传递给实例的andor参数不同而已。

到这里博主也算是搞懂了自己想要知道的问题,说到底还是没有好好的看laravel的源码,很多方法人家都是封装好的,但是你不知道,那你注定不会用。加油。

end

laravel中的where和orwhere的源码分析相关推荐

  1. Linux中mknod命令实现原理以及源码分析

    本篇文章以mknod创建字符设备文件进行讲解 字符设备驱动的Demo例子可参考该篇文章 Linux 编写简单驱动并测试 1. mknod 命令 mknod /dev/hello c 520 0 该命令 ...

  2. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  3. LinkedList中查询(contains)和删除(remove)源码分析

    一.contains源码分析 本文分析双向链表LinkedList的查询操作源码实现.jdk中源程序中,LinkedList的查询操作,通过contains(Object o)函数实现.具体见下面两部 ...

  4. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

  5. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] good

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

  6. 线程中task取消_Rust Async: async-task源码分析

    async-std是rust异步生态中的基础运行时库之一,核心理念是合理的性能 + 用户友好的api体验.经过几个月密集的开发,前些天已经发布1.0稳定版本.因此是时候来一次深入的底层源码分析.asy ...

  7. Java并发包中Semaphore的工作原理、源码分析及使用示例

    简介: 在多线程程序设计中有三个同步工具需要我们掌握,分别是Semaphore(信号量),countDownLatch(倒计数门闸锁),CyclicBarrier(可重用栅栏) 欢迎探讨,如有错误敬请 ...

  8. Android研发中对String的思考(源码分析)

    1.常用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是执行了三件事  1.声明变量 String text; 2. ...

  9. 集合的get方法中参数从多少开始_源码分析CopyOnWriteArrayList 中的隐藏知识,你Get了吗?...

    欢迎点击 "未读代码" ,关注公众号,文章每周更新 杭州-阿里园区墙 前言 本觉 CopyOnWriteArrayList 过于简单,寻思看名字就能知道内部的实现逻辑,所以没有写这 ...

最新文章

  1. swift基础--变量
  2. 【转】一个Java程序员应该掌握的10项技能
  3. 如何学好C、C++------思维方式的转变
  4. 微信小程序align_微信小程序四色花瓣
  5. c语言如何判断数据是否符合正态分布_如何判断机器学习数据集是否是线性的?...
  6. 《Python Cookbook 3rd》笔记(2.7):最短匹配模式
  7. 值得思考,机器学习模型做出的决策是你想要的吗?
  8. ResNet、Faster RCNN、Mask RCNN 是专利算法吗?盘点何恺明参与发明的专利!
  9. 数据仓库中的两大经典模型
  10. c# 后台传到前台乱码_ASP.NET关于前台脚本传递中文参数,后台获取乱码问题(乱码为方框,黑色方框等。。)...
  11. Linux常用50条命令
  12. 最近邻插值算法 python实现
  13. oracle 负载均衡连接方式常用SQL语句备忘录
  14. AnyMP4 MP3 Converter for Mac(mp3格式转换器)
  15. 2021年电工(技师)考试内容及电工(技师)复审考试
  16. opendir readdir
  17. 2015 Visual-lidar Odometry and Mapping:Low-drift,Robust,and Fast
  18. 一段真实在个人经历, 给那些迷失方向的朋友[转帖]
  19. 讲解后台管理系统之列表设计分享
  20. 六成受访美国人认为教育系统正在令这一代人失望

热门文章

  1. 12层打败50层,ParNet 普林斯顿+英特尔:更深不一定更好
  2. yolov5 soft_nms cluster_nms,cluster_SPM_nms,cluster_diounms,cluster_SPM_dist_nms,diou_nms
  3. 模型大小 与参数量计算
  4. error C2061: 语法错误: 标识符“std”
  5. 目标跟踪数据集OTB、VOT下载
  6. missing template arguments before异常解决
  7. 傅里叶变换时间复杂度
  8. OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
  9. matlab 摄像头操作
  10. 什么是mini GBIC,mini GBIC与SFP光模块有什么区别?