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를 지원하며, 방금 설치했습니다.순서는 다음과 같습니다.순서는 다음과 같습니다.
- 더하다
"loic-sharma/profiler": "1.1.*"
composer.json의 required 섹션에 있습니다. - 자체 업데이트 = 실행>
php composer.phar self-update
콘솔로 이동합니다. - Composer 업데이트 실행 =>
php composer.phar update loic-sharma/profiler
콘솔에서도 마찬가지입니다. - 더하다
'Profiler\ProfilerServiceProvider',
앱의 공급자 배열에 있습니다.php - 더하다
'Profiler' => 'Profiler\Facades\Profiler',
app.display 내의 aliases 배열에서도 마찬가지입니다. - 달려.
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
'programing' 카테고리의 다른 글
데이터베이스 행 태플의 정수에 'L' 접미사가 붙는 이유는 무엇입니까? (0) | 2022.10.04 |
---|---|
네스트된 Vuej 슬롯: 슬롯을 손자녀에게 전달하는 방법 (0) | 2022.10.04 |
MySQL Error 1093 - FROM 절에서 업데이트할 대상 테이블을 지정할 수 없습니다. (0) | 2022.10.04 |
MySQL 오더로 인해 쿼리가 느리게 해결되지만 이유는 확실하지 않습니다. (0) | 2022.10.04 |
Java 응용 프로그램을 Pacebooker를 사용하여 MariaDB 서버에 연결 (0) | 2022.10.04 |