Ghi lại câu truy vấn Database trong Laravel
Logging query trong Laravel
Để biết ứng dụng thực hiện câu truy vấn nào tới Database ta có thể log lại câu truy vấn đó khi nó được thực thi.
Mục đich chính của việc này là ta có thể theo dõi các câu truy vấn được executed trong việc debug và tuning/optimze câu truy vấn. Mục đích
Để log các query được thực thi ta chỉ cần bắt sự kiện khi ứng dụng execute query. Ta có thể hiện bằng cách truyền vào một hàm ẩn danh khi gọi đến method Thực hiện
listen
của class DB
. Đoạn code cần được đặt trong method boot
của AppServiceProvider
hoặc của một service provide riêng tự tạo.<?php
namespace App\Providers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
DB::listen(function ($q) {
Log::info('TIME: ' . $q->time . '; SQL:' . $q->sql);
});
}
/**
* Register any application services.
*
* @return void
*/
public function register(){}
}
Ở trong hàm log mình chỉ log lại thời gian và cấu trúc của câu truy vấn. Bạn cũng có thể log lại dữ liệu được bind vào truy vấn:Log::info('TIME: ' . $q->time . '; SQL:' . $q->sql .
'; BINDINGS: ' . json_encode($q->bindings)));
Nhận xét
Đăng nhận xét