laravel에서 실행된 SQL 문을 인쇄하는 방법(두 가지 방법)

PHPz
풀어 주다: 2023-04-09 09:30:01
원래의
6162명이 탐색했습니다.

Laravel에서 데이터베이스를 쿼리하기 위해 Eloquent ORM을 사용하는 것은 흔한 일이지만, 복잡한 쿼리 요구 사항에 직면할 경우 실행된 SQL 문을 보고 디버깅해야 합니다. 그러면 실행된 SQL 문을 어떻게 인쇄합니까?

Laravel은 실행된 SQL 문을 인쇄하는 두 가지 방법을 제공합니다. 하나는 로그 출력을 통하고, 다른 하나는 이벤트 리스너 인쇄를 통하는 것입니다.

로그 출력을 통해

Laravel에서 로그 출력을 통해 실행되는 SQL 문은 가장 편리한 방법이며, 각 환경마다 해당하는 로깅 및 보기 방법이 있습니다.

구성 파일에서 SQL 문의 로깅을 활성화할 수 있습니다:

// 在config/database.php文件中,找到default下的connections数组,增加以下选项:
'log_queries' => true,  // 开启SQL日志记录
'log_channel' => 'daily', // 日志存储方式,也可使用syslog、errorlog等方式
'log_level' => 'debug', // 日志级别
로그인 후 복사

log_queries 옵션을 추가하면 Laravel은 실행된 SQL 문을 자동으로 기록하고 로그는 Storage/logs 디렉터리에 출력됩니다.

코드에서 쿼리 문을 실행한 후 다음과 같은 방법으로 SQL 문을 출력할 수 있습니다.

DB::enableQueryLog();
// 执行查询语句
$users = DB::table('users')->get();
// 获取执行的SQL语句
$sql = DB::getQueryLog()[0]['query'];
로그인 후 복사

위 코드에서 먼저 DB::enableQueryLog() 메서드를 호출하여 SQL 문을 실행한 후 기록을 활성화합니다. 마지막 SQL 문을 얻으려면 DB::getQueryLog() 메서드를 사용하면 됩니다.

그러나 이 방법을 사용하여 프로덕션 환경에서 대량의 SQL 문을 기록하면 로그 볼륨이 증가하므로 시스템 유지 관리 및 문제 해결에 도움이 되지 않으므로 주의해야 합니다. 프로덕션 환경에 로그인합니다.

이벤트 리스너를 통해

Laravel은 SQL 실행 이벤트를 수신하는 방법을 제공합니다. 개발자는 SQL 실행 이벤트를 수신하여 SQL 문을 출력할 수 있습니다. 이 방법은 더 안전하고 안정적이며 프로덕션 환경에서 많은 수의 로그를 생성하지 않습니다. .

리스너를 정의하면 쿼리문 실행시 해당 SQL문을 출력할 수 있습니다. 다음은 구현 코드입니다.

// 在AppServiceProvider的boot方法中,添加以下代码
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Events\QueryExecuted;
use Log;

// 注册SQL执行监听器
DB::listen(function (QueryExecuted $queryExecuted) {
    $sql = str_replace("?", "'%s'", $queryExecuted->sql);
    $bindings = $queryExecuted->connection->prepareBindings($queryExecuted->bindings);
    $fullSql = vsprintf($sql, $bindings);

    Log::debug('SQL:'.$fullSql);
});
로그인 후 복사

위 코드에서는 DB::listen()을 사용하여 쿼리 문이 실행될 때 트리거되는 이벤트 리스너를 등록합니다.

리스너에서는 QueryExecuted 이벤트를 통해 현재 쿼리의 SQL 문과 관련 바인딩 매개 변수 및 기타 정보를 얻은 후 Log::debug() 메서드를 통해 로그에 출력합니다.

위의 두 가지 방법을 통해 우리는 Laravel에서 SQL 문을 인쇄한다는 목적을 달성했습니다. 이는 디버깅 및 문제 해결을 보다 편리하게 할 수 있고 개발에서 대체할 수 없는 역할을 합니다.

위 내용은 laravel에서 실행된 SQL 문을 인쇄하는 방법(두 가지 방법)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿