Nhật ký truy vấn Laravel với các ràng buộc

Trong bài viết này, chúng ta sẽ thảo luận về “Cách ghi nhật ký tất cả các truy vấn SQL trong Laravel”. Như chúng ta đã biết, Laravel cung cấp các tính năng phong phú và tính linh hoạt giúp việc phát triển trở nên dễ dàng. Ghi nhật ký truy vấn SQL là cách phổ biến nhất để gỡ lỗi bất kỳ ứng dụng nào. Hôm nay mình sẽ hướng dẫn các bạn Log all SQL Queries trong ứng dụng Laravel của mình

Có nhiều cách để tạo Nhật ký truy vấn SQL

Tệp nhật ký mặc định

Đăng nhập tệp nhật ký mặc định “laravel. log” nằm ở “storage/logs”. Để ghi lại các truy vấn SQL, chúng ta phải thêm đoạn mã sau vào “AppServiceProvider. php” trong hàm “boot[]”, nằm ở “app/Providers”

use DB;
use Log;
...

// Add in boot function
DB::listen[function[$query] {
    Log::info[
        $query->sql,
        $query->bindings,
        $query->time
    ];
}];

Tạo tệp nhật ký truy vấn tùy chỉnh

Ghi nhật ký các truy vấn SQL trong “truy vấn” tùy chỉnh. log” trong thư mục “storage/logs”

use DB; // Illuminate\Support\Facades\DB;
use File; // Illuminate\Support\Facades\File;
...

// Add in boot function
DB::listen[function[$query] {
    File::append[
        storage_path['/logs/query.log'],
        '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL
    ];
}];

Bất cứ khi nào mô hình thực thi thì mỗi lần truy vấn được ghi vào “truy vấn. tập tin nhật ký. Và, dữ liệu nhật ký trông giống như

[2020-01-09 10:24:06]
select * from "users" where "id" = ? limit 1 [7]

[2020-01-09 10:25:04]
select "type" from "in_item" where "code" = ? and "vendor_id" = ? order by "id" desc [400000132365, 1]

Từ cuối cùng

Tôi hy vọng bạn thích hướng dẫn này, Hôm nay chúng ta đã khám phá “Cách ghi lại tất cả các truy vấn SQL trong Laravel”. Bạn có thể sử dụng kiến ​​thức này trong các dự án của bạn. Nếu bạn có bất kỳ câu hỏi nào, vui lòng thêm vào khu vực bình luận 😉

Bạn đang muốn in truy vấn trong Laravel? . Để in truy vấn, bạn chỉ cần in truy vấn được thực hiện lần cuối. Nhưng tôi khuyên bạn nên thay vì in nhật ký truy vấn trong Laravel. Bằng cách đó, tất cả các truy vấn của bạn sẽ được lưu trong tệp nhật ký và bạn có thể xem chúng bất cứ lúc nào

Trong bài viết này, tôi chỉ cho bạn cả hai tùy chọn in và ghi truy vấn giúp xem các truy vấn trong ứng dụng Laravel của bạn

Trong quá trình phát triển ứng dụng Laravel, đôi khi bạn có thể gặp phải tình huống cần xem truy vấn được viết có chính xác hay không. Điều này là do một số lý do – có thể người dùng không nhận được đầu ra như mong đợi, bạn đang nhận được phản hồi chậm từ máy chủ cơ sở dữ liệu hoặc bạn không nhận được bất kỳ đầu ra nào vì có gì đó không ổn với truy vấn của bạn. Trong tất cả các tình huống này, nếu bạn đang ghi nhật ký các truy vấn thì điều đó sẽ giúp gỡ lỗi sự cố

Hãy xem các truy vấn in đầu tiên trong Laravel

Cách in truy vấn trong Laravel

In truy vấn cho yêu cầu hiện tại là quy trình một lần. Bạn có thể yêu cầu chỉ in truy vấn của mình để khắc phục nhanh. Trong trường hợp này, Laravel ghi truy vấn vào bộ nhớ. Dưới đây là một ví dụ đơn giản để in truy vấn của bạn trong Laravel

use Illuminate\Support\Facades\DB;
...
...

public function UserController[]
{
    DB::enableQueryLog[];
    $arr_user = DB::table['users']->select['name', 'email as user_email']->get[];
    dd[DB::getQueryLog[]];
}

Bây giờ, nếu bạn chạy mã, bạn sẽ in truy vấn đã chọn. Sử dụng kỹ thuật trên, bạn cũng có thể in các truy vấn được thực hiện thông qua Eloquent

Người dùng có thể sử dụng phương pháp này nếu họ không muốn ghi truy vấn. Nhưng nó không phải là một cách thuận tiện. Ở đây, bạn cần lặp lại hai câu lệnh DB::enableQueryLog[]

use DB; // Illuminate\Support\Facades\DB;
use File; // Illuminate\Support\Facades\File;
...

// Add in boot function
DB::listen[function[$query] {
    File::append[
        storage_path['/logs/query.log'],
        '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL
    ];
}];
0 cho mọi truy vấn. Tùy chọn tốt hơn là lưu trữ tất cả các truy vấn trong tệp nhật ký

Truy vấn nhật ký trong Laravel

Thay vì in, cá nhân tôi thích truy vấn ghi nhật ký hơn trong Laravel. Đó là một cách dễ dàng và đúng đắn hơn cho các nhà phát triển. Và để ghi nhật ký, bạn không cần phải tìm từng truy vấn và viết mã cho nó. Bạn chỉ cần thêm một số mã vào

use DB; // Illuminate\Support\Facades\DB;
use File; // Illuminate\Support\Facades\File;
...

// Add in boot function
DB::listen[function[$query] {
    File::append[
        storage_path['/logs/query.log'],
        '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL
    ];
}];
1 và bạn đã hoàn tất

Mở tệp

use DB; // Illuminate\Support\Facades\DB;
use File; // Illuminate\Support\Facades\File;
...

// Add in boot function
DB::listen[function[$query] {
    File::append[
        storage_path['/logs/query.log'],
        '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL
    ];
}];
1 và thêm 2 Mặt tiền cho 'Tệp' và 'DB' như sau

use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\DB;

Tiếp theo, trong phương thức

use DB; // Illuminate\Support\Facades\DB;
use File; // Illuminate\Support\Facades\File;
...

// Add in boot function
DB::listen[function[$query] {
    File::append[
        storage_path['/logs/query.log'],
        '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL
    ];
}];
3, hãy viết đoạn mã dưới đây sẽ lắng nghe từng truy vấn SQL được thực thi và ghi chúng vào
use DB; // Illuminate\Support\Facades\DB;
use File; // Illuminate\Support\Facades\File;
...

// Add in boot function
DB::listen[function[$query] {
    File::append[
        storage_path['/logs/query.log'],
        '[' . date['Y-m-d H:i:s'] . ']' . PHP_EOL . $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL . PHP_EOL
    ];
}];
4

public function boot[]
{
    DB::listen[function[$query] {
        File::append[
            storage_path['/logs/query.log'],
            $query->sql . ' [' . implode[', ', $query->bindings] . ']' . PHP_EOL
       ];
    }];
}

Trong Laravel, có thêm một cách để ghi lại các truy vấn. Sử dụng cách này, nhật ký truy vấn của bạn được lưu trữ bên trong

use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\DB;
0. Đối với điều này, bạn cần thêm đoạn mã dưới đây vào tệp
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\DB;
1 của mình

________số 8

Đó là nó. Bây giờ, bạn có thể chọn một trong các phương pháp trên để ghi lại các truy vấn trong Laravel. Tôi hy vọng bài viết này sẽ hữu ích cho ứng dụng Laravel của bạn. Hãy chia sẻ suy nghĩ và đề xuất của bạn trong phần bình luận bên dưới

Làm cách nào để đăng nhập các truy vấn SQL trong Laravel?

Đăng nhập tệp nhật ký mặc định “laravel. log” nằm ở “storage/logs”. Để ghi lại các truy vấn SQL, chúng ta phải thêm đoạn mã sau vào “AppServiceProvider. php” trong hàm “boot[]”, nằm ở “app/Providers” .

Làm cách nào để nhận truy vấn SQL từ truy vấn Laravel?

Phương thức đầu tiên để nhận truy vấn của một lệnh gọi Eloquent là sử dụng phương thức toSql[] . Phương thức này trả về truy vấn mà không cần chạy truy vấn – tốt nếu bạn không muốn thay đổi dữ liệu và chỉ nhận truy vấn – nhưng phương thức này không hiển thị toàn bộ truy vấn nếu truy vấn của bạn phức tạp hơn hoặc nếu có truy vấn phụ.

Làm cách nào để in truy vấn SQL thô trong Laravel?

Nhận đầu ra SQL thô của một truy vấn. Cách dễ nhất để lấy đầu ra SQL thô của truy vấn này là sử dụng phương thức toSql[] . sử dụng Ứng dụng\Người dùng; . whereHas['đơn đặt hàng. thanh toán',fn [$q] => $q->where['amount', '>', 400] ]->toSql[];

Làm cách nào để truy vấn Laravel nhanh hơn?

Mẹo để cải thiện hiệu suất của Laravel .
Cấu hình bộ nhớ đệm
Bộ nhớ đệm định tuyến
Xóa dịch vụ không sử dụng
tối ưu hóa sơ đồ lớp
Tối ưu hóa tự động tải nhà soạn nhạc
Hạn chế sử dụng plugin
Trình biên dịch JIT
Chọn bộ đệm và trình điều khiển phiên nhanh hơn

Chủ Đề