[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.php
과application/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>