CakePHP - 마지막 쿼리 실행 가져오기
나는 마지막 질문을 받고 싶습니다 케이크.PHP가 실행되었습니다.core.php에서 디버깅을 켤 수 없고 코드를 로컬로 실행할 수 없습니다.라이브 사이트에 영향을 주지 않고 마지막 sql 쿼리를 가져와 오류 로그에 기록할 수 있는 방법이 필요합니다.이 쿼리는 실패했지만 실행 중입니다.
다음과 같은 것이 좋을 것입니다.
$this->log($this->ModelName->lastQuery);
잘 부탁드립니다.
Cake 2.0의 경우 쿼리 로그가 보호되어 작동합니다.
function getLastQuery() {
$dbo = $this->getDatasource();
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
return $lastLog['query'];
}
케이크에서 테스트 완료PHP v2.3.2
$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);
CakePHP 1.x에서는 원하는 데이터에 액세스할 수 있습니다.DataSource::_queriesLog
케이크는 이 멤버에게 더 나은 방법을 제공하지 않지만, 기본 언어는 PHP이므로 다음을 수행하는 것을 막지 못합니다.
인app/app_model.php
:
function getLastQuery()
{
$dbo = $this->getDatasource();
$logs = $dbo->_queriesLog;
return end($logs);
}
이것을 인라인으로 사용할 수 있습니다.
$dbo = $this->Model->getDatasource();
// store old state
$oldStateFullDebug = $dbo->fullDebug;
// turn fullDebug on
$dbo->fullDebug = true;
// Your code here! eg.
$this->Model->find('all');
// write to logfile
// use print_r with second argument to return a dump of the array
Debugger::log(print_r($dbo->_queriesLog, true));
// restore fullDebug
$dbo->fullDebug = $oldStateFullDebug;
단순합니다. showLog() 함수를 사용할 수 있습니다.
var_dump($this->YourModel->getDataSource()->showLog());
이것은 매우 늦은 답변입니다. 알고 있습니다. 하지만 나중에 이것이 필요한 사용자는 언제든지 IP로 디버그 설정을 제한할 수 있습니다. 예를 들어,
Configure::write('debug', 0);
if($_SERVER["REMOTE_ADDR"] == '192.168.0.100'){
Configure::write('debug', 2); //Enables debugging only for your IP.
}
Matt's와 Blavia의 솔루션 조합(디버깅이 2가 아닐 때 작동):
$dbo = $this->Model->getDatasource();
$oldStateFullDebug = $dbo->fullDebug;
$dbo->fullDebug = true;
// find or whatever...
$this->Model->find("all");
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
CakeLog::write("DBLog", $lastLog['query']);
$dbo->fullDebug = $oldStateFullDebug;
책을 빠르게 훑어보고, 케잌 api get 로그를 켤 수 있었습니다.logTransaction
사용해 본 적은 없지만, 어떤 성능을 낼지는 잘 모르겠습니다.
그렇지 않으면 FirePHP로 실험을 할 수 있으며 여기 가이드가 있습니다.
당신은 DebugKit을 시도해 볼 수도 있지만, 제 생각에는 당신이 그것을 작동시키기 위해서는 여전히 debug2가 필요하다고 생각합니다.
뭔가가 당신에게 단서를 줄 수 있기를 바랍니다. :)
다음을 사용할 수 있습니다.
$log = $this->Model->getDataSource()->getLog(false, false);
pr($log);die;
CakePHP에서 쿼리를 볼 수 있는 두 가지 방법이 있습니다.
두 가지 방법 모두 app/Config/core.php에서 아래의 한 줄을 추가해야 합니다.
Configure::write('debug', 2);
첫 번째 방법:
debug($this->getLastQuery());
쿼리를 원하는 위치 위에 줄을 추가하고 이 함수를 호출합니다.getLastQuery()
아래 코드를 사용하여 동일한 컨트롤러에서
public function getLastQuery() {
$dbo = $this->TModel->getDatasource(); //Here TModel is a model.what table you want to print
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
return $lastLog['query'];
}
두 번째 방법:
다음 행을 임의의 요소 파일에 추가합니다.
<?php echo $this->element('sql_dump'); ?>
이게 도움이 될 겁니다.
echo '<pre>';
$log = $this->YOUR_MODEL->getDataSource();
print_r($log);
exit;
언급URL : https://stackoverflow.com/questions/2521225/cakephp-get-last-query-run
'prosource' 카테고리의 다른 글
Spring 데이터 JPA 및 최대 절전 모드 분리 엔티티가 Multi-to-Many 관계를 유지하도록 전달되었습니다. (0) | 2023.08.11 |
---|---|
Powershell에서 유형 [System]을(를) 찾을 수 없습니다.창문들.Forms.KeyEventHandler] (0) | 2023.08.11 |
텍스트 파일의 내용을 자바스크립트 변수로 로드하려면 어떻게 해야 합니까? (0) | 2023.08.06 |
문자열에서 동일한 각 인수에 대한 변수를 지정해야 합니까?포맷? (0) | 2023.08.06 |
jQuery를 사용하여 입력을 읽기 전용으로 만들려면 어떻게 해야 합니까? (0) | 2023.08.06 |