Laravel ORM SQL 語句查詢、檢視,附贈 IDE ORM 語法提示

ZhiYuan發表於2019-09-03

ORM 中 SQL 查詢檢視

查過很多查詢 SQL 的方法,但發現非常多問題:

  • 改起來太麻煩
  • 安裝各種外掛
  • 好不容易找到程式碼了,改了之後卻發現壓根沒生效...

所以對於中大型專案來說,最好就是一段程式碼解決問題。以下方法正好滿足上面 2 個問題:

  • 無需安裝任何外掛,並且 改動幅度小(只需改一個檔案)
  • 簡單易用,解決後顧之憂~

功能適合於 Laravel 5.5 ~ 5.8 版本

一、修改檔案

app/Providers/AppServiceProvider 中的 boot 方法中新增以下程式碼:

\Illuminate\Database\Query\Builder::macro('sql', function () {
    $bindings = $this->getBindings();
    $sql = str_replace('?','%s',$this->toSql());
    return vsprintf($sql, $bindings);
});
\Illuminate\Database\Eloquent\Builder::macro('sql', function(){
    return ($this->getQuery()->sql());
});

二、使用方式

查詢帶引數的 SQL 語句可在 ORM 後呼叫方法

// 正確用法
User::query()->where('id', 1)->sql();

// 錯誤用法
User::query()->where('id', 1)->get()->sql();
User::query()->where('id', 1)->first()->sql();

三、效果預覽

select * from user where id = 1

「帖外話」ORM 的 IDE 函式語法提示

可在模型中新增靜態方法 query() ,後續的 where()orderByDesc() 等等相關的 ORM 都能有語法提示。

值得 注意 的是:這裡僅僅為了有提示,方便開發者除錯、檢視相關引數使用方式,但實際上 官方推薦 的寫法是不帶 query() 的,如: User::where()->get();

User::query()->where('id', 1)->sql();

與優秀的人一起成長

相關文章