From cd769fbed2b63b68538f8991fce45e12d0d8651f Mon Sep 17 00:00:00 2001 From: Nikhil Ghalme Date: Mon, 16 Mar 2026 17:33:16 +0530 Subject: [PATCH] fix: resolve Debugbar facade at runtime to support Barryvdh and Fruitcake implementations --- src/Outputs/Debugbar.php | 45 ++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/src/Outputs/Debugbar.php b/src/Outputs/Debugbar.php index 8d46898..c5b2760 100644 --- a/src/Outputs/Debugbar.php +++ b/src/Outputs/Debugbar.php @@ -2,13 +2,10 @@ namespace BeyondCode\QueryDetector\Outputs; +use DebugBar\DataCollector\MessagesCollector; use Illuminate\Support\Collection; use Symfony\Component\HttpFoundation\Response; -use Barryvdh\Debugbar\Facade as LaravelDebugbarV3; -use DebugBar\DataCollector\MessagesCollector; -use Fruitcake\LaravelDebugbar\Facades\Debugbar as LaravelDebugbar; - class Debugbar implements Output { protected $collector; @@ -17,26 +14,52 @@ public function boot() { $this->collector = new MessagesCollector('N+1 Queries'); - if (class_exists(\Fruitcake\LaravelDebugbar\Facades\Debugbar::class)) { - if (!LaravelDebugbar::hasCollector($this->collector->getName())) { - LaravelDebugbar::addCollector($this->collector); - } + $facade = $this->resolveDebugbarFacade(); + + if ($facade === null) { return; } - if (!LaravelDebugbarV3::hasCollector($this->collector->getName())) { - LaravelDebugbarV3::addCollector($this->collector); + if (! $facade::hasCollector($this->collector->getName())) { + $facade::addCollector($this->collector); } } public function output(Collection $detectedQueries, Response $response) { foreach ($detectedQueries as $detectedQuery) { - $this->collector->addMessage(sprintf('Model: %s => Relation: %s - You should add `with(%s)` to eager-load this relation.', + $this->collector->addMessage(sprintf( + 'Model: %s => Relation: %s - You should add `with(%s)` to eager-load this relation.', $detectedQuery['model'], $detectedQuery['relation'], $detectedQuery['relation'] )); } } + + /** + * Resolve the installed Debugbar facade at runtime. + * + * Supports barryvdh/laravel-debugbar (v3 and v4+) and + * fruitcake/laravel-debugbar. Returns the first class + * that the autoloader can locate, or null if none exist. + * + * @return string|null + */ + protected function resolveDebugbarFacade() + { + $candidates = [ + 'Barryvdh\Debugbar\Facades\Debugbar', + 'Barryvdh\Debugbar\Facade', + 'Fruitcake\LaravelDebugbar\Facades\Debugbar', + ]; + + foreach ($candidates as $candidate) { + if (class_exists($candidate)) { + return $candidate; + } + } + + return null; + } }