簡體   English   中英

Laravel Eloquent builder查詢日志

[英]Laravel Eloquent builder query log

我為我們的 API 創建了一個JSON 搜索引擎

組裝查詢的邏輯如下;

Laravel 宏用於在 Eloquent 模型上啟用搜索方法,該模型創建 class 的實例並運行搜索方法:

/**
 * @var $this Builder
 */
$searcher = new Searcher($this, $request);
$searcher->search();

為了保持分離,具有 URL 查詢邏輯的請求參數類被動態實例化,並且具有與依賴項相同的查詢構建器。 在 foreach 循環中執行以下操作:

new $parameter($this->request, $this->builder, $this->modelConfig);

為了查看實際搜索的內容,我設置了日志以編寫實際的查詢和綁定

Log::info('[Search] SQL: ' . $this->builder->toSql() . " Bindings: " . implode(', ', $this->builder->getBindings()));

現在我遇到的問題是,在加載相關模型時(在我確實得到了我要求的請求參數( RelationsParameter )之一中使用->with()時,因此 model 與傳遞給它的關系一起加載,但是這永遠不會反映在查詢中。

我總是會得到SELECT * FROM table WHERE something ,而沒有提及相關表。 有沒有辦法獲得基礎查詢?

你可以將你的代碼包裝在 Laravel 的查詢記錄器周圍:

\DB::connection()->enableQueryLog();
// your code
\DB::connection()->disableQueryLog();

之后,您可以使用\DB::getQueryLog()獲取記錄的查詢。

但是,如果您只想在開發時記錄,我會使用barryvdh/laravel-debugbar package。

我一直在深入挖掘 Laravel 本身,問題的答案是,為什么toSql()方法不轉儲關系 SQL 以及因為它是在觸發eagerLoadRelations方法之前編譯的。

因此,目前,在使用查詢構建器操作時,不可能轉儲整個 SQL。

halloei建議將轉儲所有執行的查詢,但這對我沒有幫助,因為它需要我在 package 之外添加代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM