Laravel Query Detector
Published on by Paul Redmond
Laravel Query Detector is a package by Marcel Pociot, which detects N+1 queries. The package will automatically notify you of any N+1 issues when your application is in debug
mode.
We all run into the N+1 problem once in a while.
Our latest @laravelphp package is here to help you discover those N+1 queries and improve your application performance – simply by browsing your application.https://t.co/DMxEQVJa1B pic.twitter.com/6i3HLS8XZ7— Marcel Pociot (@marcelpociot) July 15, 2018
The package monitors your queries in real-time while you develop your applications and notifies you of issues via a JavaScript alert()
. You can also modify the package to send alerts to your Laravel log.
Here’s the default configuration that you can publish and override in your app:
<?php return [ /* * Enable or disable the query detection. * If this is set to "null", the app.debug config value will be used. */ 'enabled' => env('QUERY_DETECTOR_ENABLED', null), /* * Threshold level for the N+1 query detection. If a relation query will be * executed more then this amount, the detector will notify you about it. */ 'threshold' => 1, /* * Here you can whitelist model relations. * * Right now, you need to define the model relation both as the class name and the attribute name on the model. * So if an "Author" model would have a "posts" relation that points to a "Post" class, you need to add both * the "posts" attribute and the "Post::class", since the relation can get resolved in multiple ways. */ 'except' => [ //Author::class => [ // Post::class, // 'posts', //] ], /* * Define the output format that you want to use. * Available options are: * * Alert: * Displays an alert on the website * \BeyondCode\QueryDetector\Outputs\Alert::class * * Log: * Writes the N+1 queries into the Laravel.log file * \BeyondCode\QueryDetector\Outputs\Log::class */ 'output' => \BeyondCode\QueryDetector\Outputs\Alert::class, ];
So for example, if you want to update the configuration to send N+1 alerts to the log, you can update the configuration to the following:
'output' => \BeyondCode\QueryDetector\Outputs\Log::class
You can install this package via composer with:
composer require beyondcode/laravel-query-detector --dev
I’d like to note that this package configuration may change in the future and it looks like the release is a pre-release at the time of writing.
Learn More
You can learn more about this package and view the source code on the GitHub repository.
If you need a refresher or are not familiar with N+1, I wrote Optimize Laravel Eloquent Queries with Eager Loading which explains an overview of N+1, how eager loading can optimize your application, and a hands-on example demonstrating an N+1 query and updating it with eager loading.