[英]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.