laravel中的where和orwhere的原始碼分析
阿新 • • 發佈:2018-11-19
一、背景
博主在寫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