programing

Larabel 3/4에서 쿼리 실행

itsource 2022. 10. 4. 21:58
반응형

Larabel 3/4에서 쿼리 실행

Laravel Query Builder 또는 Arctive ORM을 사용하여 Laravel 3/4에서 원시 실행 SQL 쿼리를 가져오려면 어떻게 해야 합니까?

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

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

또는 다음 중 하나를 선택합니다.

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

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

그렇지 않으면 실행된 모든 쿼리를 laravel.log에 저장하려면 어떻게 해야 합니까?

라라벨 4+

Larabel 5 사용자용 주의사항:전화하셔야 합니다.DB::enableQueryLog()를 참조해 주세요.쿼리를 실행하는 줄 바로 위 또는 미들웨어 내부 중 하나.

4 으로 전화해야 합니다.DB::getQueryLog()모든 실행 쿼리를 가져옵니다.

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

또는 프로파일러 패키지를 다운로드할 수 있습니다.barryvdh/laravel-debugbar를 추천합니다. 꽤 깔끔하네요.에서 해당 저장소에 설치하는 방법에 대한 지침을 볼 수 있습니다.


라라벨 3

3에서는 를 Larabel 3에서 수 .Eloquent을 하여 스태틱메서드를 호출합니다.last_query DB를 누릅니다

DB::last_query();

이렇게 하려면 , , , , , , , , , , , , , , , , , , 를 하게 할 .profiler입니다.application/config/database.php @에서 설명한와 같이 @dualed를 하게 할 수도 있습니다profiler,application/config/application.php ""를 호출합니다.DB::profile()현재 요청 및 해당 실행 시간에 실행된 모든 쿼리를 가져옵니다.

Larabel 3에서 "프로파일"을 활성화하려면

'profiler' => true,

고객님의 고객명application/config/application.php ★★★★★★★★★★★★★★★★★」application/config/database.php

이것에 의해, 각 페이지의 하부에 막대가 유효하게 됩니다.그 기능 중 하나는 실행된 쿼리와 각 쿼리의 소요 시간을 나열하는 것입니다.

여기에 이미지 설명 입력

웅변가에서는 다음 작업을 수행할 수 있습니다.

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

단, 쿼리에서 "->get()" 부분을 삭제해야 합니다.

Laravel 패키지 https://github.com/itsgoingd/clockwork에서 Chrome 확장 Clockwork를 사용할 것을 권장합니다.설치와 사용이 용이합니다.

Clockwork는 PHP 개발을 위한 Chrome 확장 기능으로, 요청, 헤더, GET 및 POST 데이터, 쿠키, 세션 데이터, 데이터베이스 쿼리, 경로, 애플리케이션 런타임 시각화 등을 포함한 PHP 스크립트의 디버깅 및 프로파일링에 유용한 모든 종류의 정보를 제공하는 새로운 패널로 개발자 도구를 확장합니다.Clockwork에는 Larabel 4 및 Slim 2 기반 애플리케이션에 대한 즉각적인 지원이 포함되어 있으며 확장 가능한 API를 통해 다른 프레임워크 또는 커스텀 프레임워크에 대한 지원을 추가할 수 있습니다.

여기에 이미지 설명 입력

프로파일러가 아직 Larabel 4에서 출시되지 않았기 때문에 SQL이 생성되는 것을 확인하기 위해 다음 도우미 함수를 만들었습니다.


public static function qcsall = True){$syslog = DB::getQueryLog();
iff conversall == false) {$last_module = endsigned);
$last_corret;를 반환한다.}
$140를 반환한다.}

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

DBH.php(Database Helper의 줄임말)라는 클래스에 이러한 종류의 함수를 보관하고 있기 때문에 다음과 같은 장소에서 호출할 수 있습니다.

dd(DBH::q()); 

이 있습니다.여기에 이미지 설명 입력

dd() 포맷에는 Kint를 사용하고 있습니다.http://raveren.github.io/kint/

Laraver 4의 경우

DB::getQueryLog()

여기 마스터 페이지 템플릿에 던질 수 있는 빠른 Javascript 스니펫이 있습니다.포함된 한 모든 쿼리는 브라우저의 Javascript Console로 출력됩니다.쉽게 읽을 수 있는 목록으로 인쇄되므로 사이트를 둘러보고 각 페이지에서 어떤 쿼리가 실행 중인지 쉽게 확인할 수 있습니다.

디버깅이 완료되면 템플릿에서 삭제합니다.

<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>

라라벨 5

이것은 절차상의 접근법이며 빠른 디버깅에 사용합니다.

    DB::enableQueryLog();

    // Run your queries
    // ...

    // Then to retrieve everything since you enabled the logging:
    $queries = DB::getQueryLog();
    foreach($queries as $i=>$query)
    {
        Log::debug("Query $i: " . json_encode($query));
    }

머리글에서 다음을 사용합니다.

     use DB;
     use Illuminate\Support\Facades\Log;

출력은 다음과 같습니다(기본 로그 파일은 laravel.log).

[2015-09-25 12:33:29] 테스트.디버깅: 쿼리 0: {"user":"user"에서 *를 선택합니다. 여기서 'user_id" = ?",",","parings":["9"],"time":0.23}

***이 질문은 Larabel 3/4로 지정되어 있는 것을 알고 있습니다만, 이 페이지는 일반적인 답변을 검색할 때 이 페이지가 표시됩니다.라라벨의 초보자들은 버전마다 차이가 있다는 것을 모를 수도 있다.DD::enableQueryLog()제가 보통 찾는 답변 중 하나에서 언급되는 은 Larabel 5에만 해당될 수 있습니다.아마 누군가 그것에 대해 코멘트를 할 수 있을 것입니다.

다음을 사용하여 쿼리 이벤트를 수신할 수도 있습니다.

DB::listen(function($sql, $bindings, $time)
{
    var_dump($sql);
});

여기의 "쿼리 이벤트 듣기"에서 문서의 정보를 참조하십시오.

쿼리 로그를 사용하면 특히 바인딩된 값이 있는 경우 실제로 실행되는 RAW 쿼리는 제공되지 않습니다.raw sql을 취득하는 최선의 방법은 다음과 같습니다.

DB::table('tablename')->toSql();

그 이상의 관여:

$query = Article::whereIn('author_id', [1,2,3])->orderBy('published', 'desc')->toSql();
dd($query);

Larabel 5를 사용하는 경우 쿼리 전 또는 미들웨어에 삽입해야 합니다.

\DB::enableQueryLog();

또는 Larabel 3 프로파일러의 대체 수단으로 다음을 사용할 수 있습니다.

https://github.com/paulboco/profiler 또는 https://github.com/barryvdh/laravel-debugbar

Larabel 4에서는 실제로 데이터베이스 쿼리에 Event Listener를 사용할 수 있습니다.

Event::listen('illuminate.query', function($sql, $bindings)
{
    foreach ($bindings as $val) {
        $sql = preg_replace('/\?/', "'{$val}'", $sql, 1);
    }

    Log::info($sql);
});

이 스니펫은 예를 들어,start/global.php질의는 정보 로그에 기록됩니다( )storage/log/laravel.log).

Event::listen('illuminate.query', function($sql, $param)
{
    \Log::info($sql . ", with[" . join(',', $param) ."]<br>\n");
});

글로벌하게 전개할 수 있습니다.php sql 쿼리를 기록합니다.

Loic Sharma SQL 프로파일러는 Larabel 4를 지원하며, 방금 설치했습니다.순서는 다음과 같습니다.순서는 다음과 같습니다.

  1. 더하다"loic-sharma/profiler": "1.1.*"composer.json의 required 섹션에 있습니다.
  2. 자체 업데이트 = 실행>php composer.phar self-update콘솔로 이동합니다.
  3. Composer 업데이트 실행 =>php composer.phar update loic-sharma/profiler콘솔에서도 마찬가지입니다.
  4. 더하다'Profiler\ProfilerServiceProvider',앱의 공급자 배열에 있습니다.php
  5. 더하다'Profiler' => 'Profiler\Facades\Profiler',app.display 내의 aliases 배열에서도 마찬가지입니다.
  6. 달려.php artisan config:publish loic-sharma/profiler콘솔로

마지막 쿼리 인쇄

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

// Add binding to query
foreach ($last_query['bindings'] as $val) {
        $last_query['query'] = preg_replace('/\?/', "'{$val}'", $last_query['query'], 1);
}
dd($last_query);

L4 원라이너

(write 쿼리):

$q=\DB::getQueryLog();dd(end($q));

라라벨 3

또 다른 방법은 다음과 같습니다.

#config/database.php

'profiler' => true

모든 쿼리 결과:

print_r(DB::profiler());

최종 결과:

print_r(DB::last_query());

라라벨에서 마지막으로 실행된 쿼리를 가져오려면DB::getQueryLog()실행된 모든 쿼리를 반환합니다.마지막 쿼리를 얻기 위해 사용합니다.end()마지막으로 실행된 쿼리를 반환하는 함수입니다.

$student = DB::table('student')->get();
$query = DB::getQueryLog();
$lastQuery = end($query);
print_r($lastQuery);

저는 http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php에서 참고했습니다.

매우 쉬운 방법이 있습니다.라벨 쿼리에서 임의의 컬럼 이름을 바꾸면 쿼리에 오류가 표시됩니다.:)

Laravel 8.x에서는 laravel.com 웹사이트에서 문서화되어 있는 서비스 프로바이더에 문의 청취자를 등록함으로써 이벤트를 들을 수 있습니다.

//header
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

public function boot()
{
   
  DB::listen(function ($query) {            
   Log::debug("SQL : " . $query->sql);
  });

}

그러면 laravel.log 파일 내의 모든 쿼리를 볼 수 있습니다.storage\logs\laravel.log

언급URL : https://stackoverflow.com/questions/14536165/get-the-query-executed-in-laravel-3-4

반응형