Файл: vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Renderer/Listener.php
Строк: 130
<?php
namespace IlluminateFoundationExceptionsRenderer;
use IlluminateContractsEventsDispatcher;
use IlluminateDatabaseEventsQueryExecuted;
use IlluminateQueueEventsJobProcessed;
use IlluminateQueueEventsJobProcessing;
use LaravelOctaneEventsRequestReceived;
use LaravelOctaneEventsRequestTerminated;
use LaravelOctaneEventsTaskReceived;
use LaravelOctaneEventsTickReceived;
class Listener
{
/**
* The queries that have been executed.
*
* @var array<int, array{connectionName: string, time: float, sql: string, bindings: array}>
*/
protected $queries = [];
/**
* Register the appropriate listeners on the given event dispatcher.
*
* @param IlluminateContractsEventsDispatcher $events
* @return void
*/
public function registerListeners(Dispatcher $events)
{
$events->listen(QueryExecuted::class, $this->onQueryExecuted(...));
$events->listen([JobProcessing::class, JobProcessed::class], function () {
$this->queries = [];
});
if (isset($_SERVER['LARAVEL_OCTANE'])) {
$events->listen([RequestReceived::class, TaskReceived::class, TickReceived::class, RequestTerminated::class], function () {
$this->queries = [];
});
}
}
/**
* Returns the queries that have been executed.
*
* @return array<int, array{connectionName: string, time: float, sql: string, bindings: array}>
*/
public function queries()
{
return $this->queries;
}
/**
* Listens for the query executed event.
*
* @param IlluminateDatabaseEventsQueryExecuted $event
* @return void
*/
public function onQueryExecuted(QueryExecuted $event)
{
if (count($this->queries) >= 100) {
return;
}
$sql = strlen($event->sql) <= 2000
? $event->sql
: mb_strcut($event->sql, 0, 2000);
$bindings = $event->connection->prepareBindings($event->bindings);
$bindingCount = substr_count($sql, '?');
$this->queries[] = [
'connectionName' => $event->connectionName,
'time' => $event->time,
'sql' => $sql,
'bindings' => count($bindings) <= $bindingCount
? $bindings
: array_slice($bindings, 0, $bindingCount),
];
}
}