prosource

CakePHP - 마지막 쿼리 실행 가져오기

probook 2023. 8. 6. 10:12
반응형

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

반응형