Programing

컨트롤러에서 CakePHP의 SQL 덤프를 어떻게 볼 수 있습니까?

lottogame 2020. 10. 23. 07:33
반응형

컨트롤러에서 CakePHP의 SQL 덤프를 어떻게 볼 수 있습니까?


CakePHP가 요청에 따라 SQL 로그를 덤프하도록하는 방법이 있습니까? 컨트롤러의 한 지점까지 코드를 실행하고 어떤 SQL이 실행되었는지 확인하고 싶습니다.


이 시도:

$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);

http://api.cakephp.org/2.3/class-Model.html#_getDataSource

하지만 둘 이상의 데이터 소스가있는 경우 각 데이터 소스에 대해이 작업을 수행해야합니다.


검색어를 표시하는 방법에는 네 가지가 있습니다.

  1. 사용자 모델에서 실행 된 마지막 쿼리가 표시됩니다.

    debug($this->User->lastQuery());  
    
  2. 이렇게하면 사용자 모델의 실행 된 모든 쿼리가 표시됩니다.

    $log = $this->User->getDataSource()->getLog(false, false);       
    debug($log);
    
  3. 그러면 모든 쿼리의 로그가 표시됩니다.

    $db =& ConnectionManager::getDataSource('default');
    $db->showLog();
    
  4. 모든 쿼리 로그를 애플리케이션 전체에 표시하려면 view / element / filename.ctp에서 사용할 수 있습니다.

    <?php echo $this->element('sql_dump'); ?>
    

CakePHP 1.3을 사용하고 있다면, 이것을 뷰에 넣어 SQL을 출력 할 수 있습니다 :

<?php echo $this->element('sql_dump'); ?>

따라서 위의 행만 포함하는 'sql'이라는 뷰를 만든 다음보고 싶을 때마다 컨트롤러에서이를 호출 할 수 있습니다.

$this->render('sql');

(또한 디버그 수준을에서 2 이상으로 설정해야합니다. app/config/core.php)

출처


cakephp 2.0 용 AppModel.php에이 함수 작성

function getLastQuery()
{
    $dbo = $this->getDatasource();
    $logs = $dbo->getLog();
    $lastLog = end($logs['log']);
    return $lastLog['query'];
}

컨트롤러 쓰기에서 이것을 사용하려면 : echo $ this-> YourModelName-> getLastQuery ();


CakePHP에 $ this-> Model-> lastQuery ();가 없다는 것은 매우 실망 스럽습니다. 다음은 Handsofaten의 수정 된 버전을 포함한 두 가지 솔루션입니다.

1. 마지막 쿼리 함수 만들기

마지막 쿼리 실행을 인쇄하려면 /app_model.php 파일에 다음을 추가하십시오.

function lastQuery(){
    $dbo = $this->getDatasource();
    $logs = $dbo->_queriesLog;
    // return the first element of the last array (i.e. the last query)
    return current(end($logs));
}

그런 다음 출력을 인쇄하려면 다음을 실행할 수 있습니다.

debug($this->lastQuery()); // in model

또는

debug($this->Model->lastQuery()); // in controller

2. SQL보기 렌더링 (모델 내에서 사용할 수 없음)

주어진 페이지 요청에서 실행되는 모든 쿼리를 인쇄하려면 컨트롤러 (또는 구성 요소 등)에서 다음을 실행하십시오.

$this->render('sql');

누락 된보기 오류가 발생할 가능성이 있지만 최근 쿼리에 액세스하지 않는 것보다 낫습니다!

(Handsofaten이 말했듯이 cake / libs / view / elements /에 /elements/sql_dump.ctp가 있지만 sql.ctp 뷰를 만들지 않고도 위의 작업을 수행 할 수있었습니다. 누구든지 설명 할 수 있습니까?)


CakePHP 1.2 ..

$db =& ConnectionManager::getDataSource('default');
$db->showLog();

마침내 저에게 효과가 있었고 2.0 과도 호환되는 것은 레이아웃 (또는 모델)을 추가하는 것입니다.

<?php echo $this->element('sql_dump');?>

또한 Config / core.php에 설정된 디버그 변수에 따라 다릅니다.


케이크 용 플러그인 DebugKit도 작업을 수행합니다. https://github.com/cakephp/debug_kit

참고 URL : https://stackoverflow.com/questions/3647065/how-can-i-see-cakephps-sql-dump-in-the-controller

반응형