* $debugStack = new Doctrine\DBAL\Logging\DebugStack(); * $entityManager->getConnection()->getConfiguration()->setSQLLogger($debugStack); * $debugbar->addCollector(new DoctrineCollector($debugStack)); * */ class DoctrineCollector extends DataCollector implements Renderable, AssetProvider { protected $debugStack; /** * DoctrineCollector constructor. * @param $debugStackOrEntityManager * @throws DebugBarException */ public function __construct($debugStackOrEntityManager) { if ($debugStackOrEntityManager instanceof EntityManager) { $debugStackOrEntityManager = $debugStackOrEntityManager->getConnection()->getConfiguration()->getSQLLogger(); } if (!($debugStackOrEntityManager instanceof DebugStack)) { throw new DebugBarException("'DoctrineCollector' requires an 'EntityManager' or 'DebugStack' object"); } $this->debugStack = $debugStackOrEntityManager; } /** * @return array */ public function collect() { $queries = array(); $totalExecTime = 0; foreach ($this->debugStack->queries as $q) { $queries[] = array( 'sql' => $q['sql'], 'params' => (object) $q['params'], 'duration' => $q['executionMS'], 'duration_str' => $this->formatDuration($q['executionMS']) ); $totalExecTime += $q['executionMS']; } return array( 'nb_statements' => count($queries), 'accumulated_duration' => $totalExecTime, 'accumulated_duration_str' => $this->formatDuration($totalExecTime), 'statements' => $queries ); } /** * @return string */ public function getName() { return 'doctrine'; } /** * @return array */ public function getWidgets() { return array( "database" => array( "icon" => "arrow-right", "widget" => "PhpDebugBar.Widgets.SQLQueriesWidget", "map" => "doctrine", "default" => "[]" ), "database:badge" => array( "map" => "doctrine.nb_statements", "default" => 0 ) ); } /** * @return array */ public function getAssets() { return array( 'css' => 'widgets/sqlqueries/widget.css', 'js' => 'widgets/sqlqueries/widget.js' ); } }