1. 程式人生 > >laravel中的where和orwhere的原始碼分析

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啊,orWhereNotInwherenull,orWhereNull全部都是封裝好的,我們直接用就好了,本質上只是最後傳遞給例項的andor引數不同而已。

      到這裡博主也算是搞懂了自己想要知道的問題,說到底還是沒有好好的看laravel的原始碼,很多方法人家都是封裝好的,但是你不知道,那你註定不會用。加油。

end