endeavour-agency / laravel-query-insights
This packages aims to provide insights into performed queries. Multiple handlers exist to control what should be done with the query data.
Installs: 899
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/endeavour-agency/laravel-query-insights
Requires
- php: ^8.2
 - laravel/framework: ^11
 
Requires (Dev)
- mockery/mockery: ^1.6
 - nuwave/lighthouse: ^6.45
 - orchestra/testbench: ^9
 - phpunit/phpunit: ^11.3
 
This package is auto-updated.
Last update: 2025-10-13 14:54:43 UTC
README
This package aims to provide query insights. By default, it comes with two handlers:
LogHandler: Writes the executed queries to a log fileLighthouseResponseHandler: Adds the executed queries to the extensions section of a Lighthouse GraphQL response.
Getting started
To get started, simply install the package.
composer require endeavour-agency/laravel-query-insights
Then, in a service provider, register the desired handlers with the QueryCollectorInterface.
public function register(): void { $collector = $this->app->make(QueryCollectorInterface::class); $collector ->registerHandler( $this->app->make(LogHandler::class), ) ->registerHandler( $this->app->make(LighthouseResponseHandler::class), ); }
Configuration
The package comes with a configuration file which can be published through
php artisan vendor:publish --provider=EndeavourAgency\\LaravelQueryInsights\\Providers\\LaravelQueryInsightsProvider
Through the configuration file, the insights can be enabled or disabled. By default, insights will only
be enabled if config('app.debug') evaluates to true.
Alternatively, insights can be enabled or disabled through the QUERY_INSIGHTS_ENABLED env variable.
Handlers
The package bundles a few handlers to get you started quickly.
Log handler
The log handler will log all executed queries to a log file. It accepts an instance of the Psr\Log\LoggerInterface.
By default, it will log the queries to the default log channel (config('logging.default')).
Example log handler output:
[2024-11-08 14:27:30] local.INFO: Queries: POST http://localhost:8000/graphql {"queries":[{"query":"select * from `users` where `email` = 'john@doe.com' and `users`.`deleted_at` is null limit 1","sql":"select * from `users` where `email` = ? and `users`.`deleted_at` is null limit 1","bindings":["john@doe.com"],"time":1.54}]}
[2024-11-08 14:27:31] local.INFO: Queries: POST http://localhost:8000/graphql {"queries":[{"query":"select * from `users` where `email` = 'jane@doe.com' and `users`.`deleted_at` is null limit 1","sql":"select * from `users` where `email` = ? and `users`.`deleted_at` is null limit 1","bindings":["jane@doe.com"],"time":1.51}]}
Lighthouse Response Handler
The Lighthouse response handler will add executed queries to the extensions section of the GraphQL responses bodies, when using Lighthouse.
Example Lighthouse response handler output:
{
  "data": {
    "me": {
      "email": "john@doe.com"
    }
  },
  "extensions": {
    "queries": [
      {
        "query": "select * from `oauth_access_tokens` where `id` = '******' limit 1",
        "sql": "select * from `oauth_access_tokens` where `id` = ? limit 1",
        "bindings": [
          "******"
        ],
        "time": 1.51
      },
      {
        "query": "select * from `users` where `id` = '17' and `users`.`deleted_at` is null limit 1",
        "sql": "select * from `users` where `id` = ? and `users`.`deleted_at` is null limit 1",
        "bindings": [
          "17"
        ],
        "time": 0.45
      }
    ]
  }
}
Custom handlers
To create your own handler, simply create a class that implements the EndeavourAgency\LaravelQueryInsights\Contracts\HandlerInterface
interface. Then, register it like you would with the default handlers (see Getting started).