[php] Laravel 3/4에서 실행 된 쿼리 가져 오기

Laravel Query Builder 또는 Eloquent ORM을 사용하여 Laravel 3/4에서 실행 된 원시 SQL 쿼리를 어떻게 검색 할 수 있습니까?

예를 들면 다음과 같습니다.

DB::table('users')->where_status(1)->get();

또는:

(posts (id, user_id, ...))

User::find(1)->posts->get();

그렇지 않으면 최소한 laravel.log에 실행 된 모든 쿼리를 어떻게 저장할 수 있습니까?



답변

라 라벨 4+

Laravel 4 이상에서는 DB::getQueryLog()실행 된 모든 쿼리를 가져 오려면 전화 해야합니다.

$queries = DB::getQueryLog();
$last_query = end($queries);

또는 프로파일 러 패키지를 다운로드 할 수 있습니다. barryvdh / laravel-debugbar를 추천 합니다. 저장소 에 설치하는 방법에 대한 지시 사항을 읽을 수 있습니다 .

Laravel 5 사용자 참고 사항 :DB::enableQueryLog() 쿼리를 실행하기 전에 전화해야 합니다. 쿼리를 실행하는 행 바로 위 또는 미들웨어 내부.


라 라벨 3

Laravel 3에서는 클래스 Eloquent의 정적 메소드 last_query를 호출 하는 모델 에서 마지막으로 실행 된 쿼리를 얻을 수 있습니다 DB.

DB::last_query();

그러나이 경우 profiler옵션 을 활성화해야합니다 application/config/database.php. 또는 @dualed에서 언급했듯이 profiler옵션을 활성화 application/config/application.php하거나 호출 DB::profile()하여 모든 요청이 현재 요청 및 실행 시간에 실행되도록 할 수 있습니다.


답변

Laravel 3에서 ” Profiler “를 활성화하여

'profiler' => true,

당신 application/config/application.phpapplication/config/database.php

그러면 각 페이지 하단에 막대가 활성화됩니다. 그 기능 중 하나는 실행 된 쿼리와 각 쿼리에 소요 된 시간을 나열하는 것입니다.

여기에 이미지 설명을 입력하십시오


답변

Eloquent의 경우 다음을 수행 할 수 있습니다.

$result->getQuery()->toSql();

그러나 쿼리에서 “-> get ()”부분을 제거해야합니다.


답변

Laravel 패키지 https://github.com/itsgoingd/clockwork 와 함께 Chrome 확장 프로그램 Clockwork 를 사용하는 것이 좋습니다 . 설치 및 사용이 쉽습니다.

Clockwork는 PHP 개발을위한 Chrome 확장 프로그램으로 개발자 도구를 새로운 패널로 확장하여 요청에 대한 정보, 헤더, GET 및 POST 데이터, 쿠키, 세션 데이터, 데이터베이스 쿼리, 경로, 응용 프로그램 런타임 시각화 등 시계에는 Laravel 4 및 Slim 2 기반 응용 프로그램에 대한 기본 지원이 포함되어 있으며 확장 가능한 API를 통해 다른 또는 사용자 정의 프레임 워크에 대한 지원을 추가 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


답변

프로파일 러가 아직 Laravel 4나오지 않았으므로 SQL이 생성되는 것을 확인하기 위해이 도우미 함수를 만들었습니다.

    공공 정적 함수 q ($ all = true)
    {
        $ queries = DB :: getQueryLog ();

        if ($ all == false) {
            $ last_query = 끝 ($ 쿼리);
            $ last_query를 반환;
        }

        $ 쿼리를 반환;
    }

참고 : 마지막 SQL 쿼리 만 원하는 경우 $ all 플래그를 false로 설정하십시오 .

이런 종류의 함수를 DBH.php (데이터베이스 도우미의 약자)라는 클래스에 보관하여 다음과 같은 곳에서 호출 할 수 있습니다.

dd(DBH::q()); 

내가 얻는 결과는 다음과 같습니다.
여기에 이미지 설명을 입력하십시오

궁금한 점이 있으면 dd () 형식으로 Kint를 사용합니다.
http://raveren.github.io/kint/


답변

Laraver 4의 경우

DB::getQueryLog()


답변

다음은 마스터 페이지 템플릿에 넣을 수있는 빠른 자바 스크립트 스 니펫입니다. 포함 된 모든 쿼리는 브라우저의 Javascript 콘솔로 출력됩니다. 쉽게 읽을 수있는 목록으로 인쇄하여 사이트를 쉽게 탐색하고 각 페이지에서 어떤 쿼리가 실행되고 있는지 확인할 수 있습니다.

디버깅이 끝나면 템플릿에서 제거하십시오.

<script type="text/javascript">
    var queries = {{ json_encode(DB::getQueryLog()) }};
    console.log('/****************************** Database Queries ******************************/');
    console.log(' ');
    queries.forEach(function(query) {
        console.log('   ' + query.time + ' | ' + query.query + ' | ' + query.bindings[0]);
    });
    console.log(' ');
    console.log('/****************************** End Queries ***********************************/');
</script>