sql find - Как я могу увидеть сброс SQL CakePHP в контроллере?




4 Answers

Попробуй это:

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

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

Вам нужно будет сделать это для каждого источника данных, если у вас есть более одного.

by toarray

Есть ли способ заставить CakePHP сбрасывать свой SQL-журнал по требованию? Я хотел бы выполнить код до точки в моем контроллере и посмотреть, какой SQL был запущен.




Существует четыре способа отображения запросов:

  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 нет $ 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, есть /elements/sql_dump.ctp в cake / libs / view / elements /, но я смог сделать это, не создавая представление sql.ctp. Может ли кто-нибудь объяснить это?)




То, что работало наконец для меня, а также совместимо с 2.0, заключается в добавлении в мой макет (или в модели)

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

Он также зависит от переменной отладки, установленной в Config / core.php




Related

sql cakephp

Tags

sql   cakephp