Сниппет для поиска N+1 в Laravel

Сниппет для поиска N+1 в Laravel
Когда N+1 прячется в шаблоне или ресурсе, его легко не заметить на локальной базе. Этот сниппет считает повторяющиеся SQL-запросы за один HTTP-запрос и помогает поймать регрессии до того, как они попадут в прод.

use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Support\Facades\DB;

public function boot(): void
{
    if ($this->app->isProduction()) {
        return;
    }

    $seen = [];

    DB::listen(function (QueryExecuted $query) use (&$seen) {
        $seen[$query->sql] = ($seen[$query->sql] ?? 0) + 1;
    });
}


Учтите: запросы с разными значениями параметров здесь считаются одним и тем же SQL, а порог повторов нужно подбирать под ваш проект.

https://habr.com/ru/articles/1101198/
Подписаться на канал Открыть в Telegram