컨트롤러에서 CakePHP의 SQL 덤프를 어떻게 볼 수 있습니까?
CakePHP가 요청에 따라 SQL 로그를 덤프하도록하는 방법이 있습니까? 컨트롤러의 한 지점까지 코드를 실행하고 어떤 SQL이 실행되었는지 확인하고 싶습니다.
이 시도:
$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);
http://api.cakephp.org/2.3/class-Model.html#_getDataSource
하지만 둘 이상의 데이터 소스가있는 경우 각 데이터 소스에 대해이 작업을 수행해야합니다.
검색어를 표시하는 방법에는 네 가지가 있습니다.
사용자 모델에서 실행 된 마지막 쿼리가 표시됩니다.
debug($this->User->lastQuery());
이렇게하면 사용자 모델의 실행 된 모든 쿼리가 표시됩니다.
$log = $this->User->getDataSource()->getLog(false, false); debug($log);
그러면 모든 쿼리의 로그가 표시됩니다.
$db =& ConnectionManager::getDataSource('default'); $db->showLog();
모든 쿼리 로그를 애플리케이션 전체에 표시하려면 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
'Programing' 카테고리의 다른 글
스칼라는 요소가 목록에 있는지 확인합니다. (0) | 2020.10.24 |
---|---|
Chrome의 파일 입력에서 "선택된 파일 없음"툴팁을 제거하려면 어떻게해야합니까? (0) | 2020.10.23 |
Oracle PL / SQL-사용자 지정 SQLERRM을 사용하여 사용자 정의 예외 발생 (0) | 2020.10.23 |
"치명적인 오류 : 로컬 그런트를 찾을 수 없습니다." (0) | 2020.10.23 |
C #에 대한 대화 형 인터프리터가 있습니까? (0) | 2020.10.23 |