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

Tôi sẽ giải thích cho bạn ví dụ về laravel 9 lưu trữ nhật ký truy vấn sql hùng hồn vào tệp nhật ký ứng dụng cũng như vào tệp nhật ký tùy chỉnh. Quản lý nhật ký truy vấn giúp gỡ lỗi, tìm chi tiết các truy vấn đang chạy trong ứng dụng

Tệp nhật ký là những tệp lưu trữ trạng thái ứng dụng như lỗi, thông tin, cảnh báo, v.v. Tệp nhật ký giúp nhà phát triển ứng dụng gỡ lỗi ứng dụng

Laravel theo mặc định cung cấp /storage/logs/laravel. vị trí tệp nhật ký nơi lưu trữ nhật ký ứng dụng. Nhưng đôi khi chúng ta có thể cần tạo tệp nhật ký với tác vụ cụ thể. Ngoài ra để duy trì nhật ký, chúng tôi có gói trình soạn thảo thực hiện chính xác điều tương tự như những gì chúng tôi đang thảo luận. Nhấp vào đây để tìm hiểu về gói LogViewer và nó đang hoạt động

Bắt đầu nào

Tải xuống Laravel

Hãy để chúng tôi bắt đầu hướng dẫn bằng cách cài đặt một ứng dụng laravel mới. nếu bạn đã tạo dự án rồi thì bỏ qua bước sau

composer create-project laravel/laravel example-app

Khái niệm 1. Lưu trữ trong tệp nhật ký mặc định

Vị trí tệp nhật ký mặc định của Laravel là lưu trữ/log/laravel. đăng nhập. Chúng tôi sẽ lưu trữ nhật ký SQL trong tệp. Nhưng trước khi lưu trữ nhật ký, chúng ta cần thực hiện một số cấu hình

Mở AppServiceProvider. php từ thư mục ứng dụng/Nhà cung cấp

ứng dụng/Nhà cung cấp/AppServiceProvider. php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Log;

class AppServiceProvider extends ServiceProvider

{

/**

* Register any application services.

*

* @return void

*/

public function register()

{

//

}

/**

* Bootstrap any application services.

*

* @return void

*/

public function boot()

{

DB::listen(function ($query) {

Log::info(

$query->sql,

$query->bindings,

$query->time

);

});

}

}

Chúng tôi đã thêm logic nhật ký truy vấn vào phương thức boot()

Bất cứ khi nào chúng tôi chạy bất kỳ truy vấn nào bằng cách sử dụng Mô hình, Truy vấn thô, Eloquent, v.v. thì các truy vấn sẽ tự động được quản lý thành truy vấn. tệp nhật ký. Tệp này sẽ nằm trong thư mục /storage/logs

Đối với hầu hết các dự án Laravel dựa trên web, bạn có thể sử dụng gói laravel-debugbar tuyệt vời để có cái nhìn tổng quan trong trình duyệt về tất cả các truy vấn của bạn đang được thực thi trên mỗi trang. Đối với các lệnh chạy qua Artisan tại dòng lệnh, bạn cần một giải pháp thay thế

Đây là một phương pháp mà tôi đã sử dụng khá thường xuyên khi làm việc với DNS Spy, vì hầu hết logic của ứng dụng nằm bên trong các công việc của worker, chỉ được thực thi thông qua CLI

Vì vậy, đây là một phương pháp nhanh chóng để ghi lại tất cả các truy vấn SQL của bạn vào đầu ra của bảng điều khiển

sql);
      });
}

Đầu tiên, nhập DB Facade

Tiếp theo, thêm một trình nghe mới cho mọi truy vấn đang được thực thi và để nó var_dump() truy vấn. Ngoài ra, bạn có thể sử dụng _______________ hoặc _______________, công cụ

Kết quả;

$ php artisan queue:work
...
string(170) "select * from `xxx` where `xxx`.`record_id` = ? and `xxx`.`record_id` is not null ..."
string(146) "insert into `xxx` (`value`, `nameserver_id`, `ttl`, .. ) values (?, ?, ?, ...)"

Thêm trình nghe DB là một cách thuận tiện để xem tất cả các truy vấn của bạn ngay tại bảng điều khiển, trong những trường hợp không thể sử dụng thanh gỡ lỗi

Trong quá trình tối ưu hóa tốc độ và truy vấn ứng dụng, chúng tôi phải điều tra xem có bao nhiêu truy vấn đang chạy cho các yêu cầu điểm cuối cụ thể và số dòng của truy vấn đó là bao nhiêu và truy vấn đó cần bao nhiêu thời gian để thực thi, v.v. Trong trường hợp này, gói Laravel Query Log giúp cuộc sống của chúng ta dễ dàng hơn. Chỉ cần cài đặt nó và kích hoạt nó từ tệp env của bạn và hoàn tất. Nó sẽ ghi nhật ký tất cả các truy vấn SQL đã thực hiện trong laravel của bạn, số dòng, tổng truy vấn, SQL cuối cùng, các ràng buộc SQL và nhiều hơn nữa. Hãy xem cách chúng ta có thể cài đặt và sử dụng nó trong dự án Laravel của bạn

Đặc trưng

  • Gói nhẹ và cài đặt dễ dàng
  • Hiển thị tổng truy vấn đã thực hiện, tổng thời gian, điểm cuối, phương thức HTTP
  • Mỗi truy vấn được thực hiện hiển thị số dòng, liên kết và truy vấn cuối cùng có thể chạy qua máy khách SQL của bạn
  • Điều hướng trực tiếp đến một số dòng tệp cụ thể bằng cách nhấp vào đường dẫn ctrl+file
  • Định dạng dữ liệu nhật ký văn bản (mặc định)
  • Định dạng dữ liệu nhật ký JSON

Nhật ký truy vấn mẫu

url         : http://example.test
method      : GET
total_query : 3
total_time  : 5.69
--------------------

sl          : 1
query       : select * from `students` where `id` = ? and `name` = ?
bindings    : 6|Tomas
final_query : select * from `students` where `id` = 6 and `name` = 'Tomas'
time        : 4.38
file        : C:\www\example\app\Http\Controllers\SiteController.php:10
line        : 10

sl          : 2
query       : select * from `students` where `id` = ? and `phone` = ?
bindings    : 6|649-768-7305
final_query : select * from `students` where `id` = 6 and `phone` = '649-768-7305'
time        : 0.75
file        : C:\www\example\app\Http\Controllers\SiteController.php:11
line        : 11

sl          : 3
query       : select * from `students` where `id` = ?
bindings    : 6
final_query : select * from `students` where `id` = 6
time        : 0.56
file        : C:\www\example\app\Http\Controllers\SiteController.php:12
line        : 12

Cài đặt

Cài đặt rất đơn giản. Chỉ cần chạy lệnh soạn nhạc này qua dấu nhắc lệnh của bạn

composer require haruncpi/laravel-query-log

Tập quán

Để bật nhật ký truy vấn, hãy đặt nhật ký này vào tệp .env của bạn

QUERY_LOG=true

Bây giờ bạn sẽ thấy mỗi bản ghi truy vấn đã thực hiện trong tệp query.log bên trong thư mục lưu trữ. Định dạng nhật ký mặc định là văn bản. Bạn có thể đặt định dạng dữ liệu JSON bằng cách đặt QUERY_LOG_FORMAT=json

Làm cách nào để ghi lại thời gian truy vấn trong Laravel?

Phương pháp nào được sử dụng để lấy tất cả các bản ghi từ cơ sở dữ liệu trong Laravel?

Sau khi định cấu hình cơ sở dữ liệu, chúng tôi có thể truy xuất các bản ghi bằng cách sử dụng mặt tiền DB bằng phương thức chọn .

Làm cách nào để kiểm tra truy vấn được thực thi hay không trong Laravel?

DB. kết nối ('my_connection') -> enableQueryLog(); . print_r( DB. kết nối('my_connection')->getQueryLog() );

Làm cách nào để sử dụng truy vấn SQL thô trong Laravel?

Ví dụ từ tài liệu của Laravel. $users = DB. table('users') ->selectRaw('count(*) as user_count, status') ->where('status', '<>', 1) ->groupBy('status') ->get(); . $products = DB. table('products') ->leftjoin('category','category. Another example: $products = DB::table('products') ->leftjoin('category','category.