Я хотел знать, есть ли способ зарегистрировать запросы mysql в CakePHP, которые выполняются, когда мы используем метод find на моделях, я знаю, что запросы к базе данных rails, так что Cake делает то же самое, если да, то как я могу включить его или использовать Это?
Шив
Предполагая, что вы находитесь на nix os, наилучшим подходом было бы фактически связать сам журнал mysql.
Вы могли бы изучить некоторые интересные вещи из этого.
войти в Ubuntu при установке из репозитория
tail -f /var/log/mysql/mysql.log
Как упоминалось ниже, это огромный убийца производительности (ну, все журналы имеют некоторое влияние на производительность). Поэтому убедитесь, что вы используете его только на своих машинах dev / QA и только на короткое время на вашей производственной машине.
Эта страница содержит инструкции о том, как заставить Cake регистрировать запросы так же, как и рельсы.
Очень простой способ регистрации всех выполняемых запросов:
в вашем торте \ libs \ model \ datasources \ dbo \ dbo_mysql.php
найдите функцию _execute :
function _execute($sql) { return mysql_query($sql, $this->connection); }
добавьте строку « $ this-> log ($ sql); « before » возвращает mysql_query ($ sql, $ this-> connection);
function _execute($sql) { $this->log($sql); return mysql_query($sql, $this->connection); }
Это оно!!!!! Все ваши SQL-запросы регистрируются. Убедитесь, что файл журнала настроен правильно и имеет достаточные разрешения. наслаждаться
CakePHP 1.3 использует для sql_dump
элемент sql_dump
.
Вы можете использовать элемент непосредственно, когда Configure::read('debug')
установлен в 2:
echo $this->element('sql_dump');
Или возьмите его код напрямую, если вам нужно сделать что-то еще с ним (например, эхо его из ShellTask)
$sources = ConnectionManager::sourceList(); $logs = array(); foreach ($sources as $source): $db =& ConnectionManager::getDataSource($source); if (!$db->isInterfaceSupported('getLog')): continue; endif; $logs[$source] = $db->getLog(); endforeach;
Эхо, например:
print_r($logs)
Это то, что я использую (поместите его в папку с элементами, а затем включите в свой макет)
<?php ob_start(); echo $this->element('sql_dump'); $out = ob_get_contents(); ob_end_clean(); CakeLog::write('mysql' , $out); ?>
то вы найдете файл mysql.log в TMP.logs.DS.mysql.log