Às vezes, você precisa armazenar todas ou algumas consultas para depurar porpuses. Vamos pensar que você irá armazená-los em seu banco de dados para que possa criar um controlador principal onde o resto deve fazer isso ou, melhor ainda, acho que você pode criar um plug-in ZF, então vamos ver como funciona!
<?php
class My_Plugin_Profiler extends Zend_Controller_Plugin_Abstract
{
public function postDispatch()
{
$db = Zend_Registry::get('db');
$profiler = $db->getProfiler();
// we set the filter
$profiler->setFilterQueryType(
Zend_Db_Profiler::SELECT |
Zend_Db_Profiler::INSERT |
Zend_Db_Profiler::UPDATE |
Zend_Db_Profiler::DELETE);
$profile = $profiler->getQueryProfiles(
Zend_Db_Profiler::INSERT |
Zend_Db_Profiler::UPDATE |
Zend_Db_Profiler::DELETE);
$logs = new Logs_Model_DbTable_Log();
/* if the filter has no content the is null
otherwise it will be an array and we have
to prevent if to get no error here */
if(is_array($profile))
{
foreach($profile as $row)
{
$data = array(
'sql' => $row->getQuery(),
'bind_params' => implode(', ', $row->getQueryParams()),
);
$logs->insert($data);
}
}
}
}
?>
No código acima, eu filtro, seleciono, insiro, atualizo e excluo consultas, mas depois recebo apenas inserir, atualizar e excluir.
Claro que é necessário registrar este plugin para este trabalho e como estamos usando a função postDispatch (), nos certificamos de que cada consulta será armazenada no final do despacho.