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
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
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:
<?phpreturn [/** 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.
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.
Full stack web developer. Author of Lumen Programming Guide and Docker for PHP Developers.