diff --git a/src/LaravelDebugbar.php b/src/LaravelDebugbar.php index 6a9aa9f4..11fc293e 100644 --- a/src/LaravelDebugbar.php +++ b/src/LaravelDebugbar.php @@ -470,11 +470,16 @@ function (\Illuminate\Database\Events\ConnectionEstablished $event) { if ($this->shouldCollect('models', true) && $events) { try { $this->addCollector(new ObjectCountCollector('models')); - $events->listen('eloquent.retrieved:*', function ($event, $models) { - foreach (array_filter($models) as $model) { - $this['models']->countClass($model); - } - }); + $eventList = ['retrieved', 'created', 'updated', 'deleted']; + $this['models']->setKeyMap(array_combine($eventList, array_map('ucfirst', $eventList))); + $this['models']->collectCountSummary(true); + foreach ($eventList as $event) { + $events->listen("eloquent.{$event}: *", function ($event, $models) { + $event = explode(': ', $event); + $count = count(array_filter($models)); + $this['models']->countClass($event[1], $count, explode('.', $event[0])[1]); + }); + } } catch (Exception $e) { $this->addCollectorException('Cannot add Models Collector', $e); } diff --git a/src/Resources/laravel-debugbar.css b/src/Resources/laravel-debugbar.css index 0147606a..e7a3f9ea 100644 --- a/src/Resources/laravel-debugbar.css +++ b/src/Resources/laravel-debugbar.css @@ -227,7 +227,8 @@ div.phpdebugbar .phpdebugbar-header select { } dl.phpdebugbar-widgets-kvlist dt, -dl.phpdebugbar-widgets-kvlist dd { +dl.phpdebugbar-widgets-kvlist dd, +table.phpdebugbar-widgets-tablevar td { min-height: 20px; line-height: 20px; padding: 4px 5px 5px; @@ -239,7 +240,8 @@ dl.phpdebugbar-widgets-kvlist dd.phpdebugbar-widgets-value.phpdebugbar-widgets-p background: transparent; } -dl.phpdebugbar-widgets-kvlist dt { +dl.phpdebugbar-widgets-kvlist dt, +table.phpdebugbar-widgets-tablevar td:first-child { width: calc(25% - 10px); } @@ -459,7 +461,8 @@ div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params td.phpdebugb margin-left: 3px; } -ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item:nth-child(even) { +ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item:nth-child(even), +table.phpdebugbar-widgets-tablevar tr:nth-child(even) { background-color: var(--debugbar-background-alt); } @@ -476,6 +479,10 @@ div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugb float: left; } +table.phpdebugbar-widgets-tablevar td { + border: 0; +} + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-info { color: #1299DA; } diff --git a/src/Support/Clockwork/Converter.php b/src/Support/Clockwork/Converter.php index 6a7b590b..6dc64642 100644 --- a/src/Support/Clockwork/Converter.php +++ b/src/Support/Clockwork/Converter.php @@ -117,7 +117,16 @@ public function convert($data) $output['modelsCreated'] = []; $output['modelsUpdated'] = []; $output['modelsDeleted'] = []; - $output['modelsRetrieved'] = $data['models']['data']; + $output['modelsRetrieved'] = []; + + foreach ($data['models']['data'] as $model => $value) { + foreach ($value as $event => $count) { + $eventKey = 'models' . ucfirst($event); + if (isset($output[$eventKey])) { + $output[$eventKey][$model] = $count; + } + } + } } if (isset($data['views']['templates'])) { diff --git a/tests/DataCollector/JobsCollectorTest.php b/tests/DataCollector/JobsCollectorTest.php index fc5eff1d..b64fdb5e 100644 --- a/tests/DataCollector/JobsCollectorTest.php +++ b/tests/DataCollector/JobsCollectorTest.php @@ -34,27 +34,28 @@ public function testItCollectsDispatchedJobs() /** @var \DebugBar\DataCollector\ObjectCountCollector $collector */ $collector = debugbar()->getCollector('jobs'); $collector->setXdebugLinkTemplate(''); + $collector->setKeyMap([]); + $data = []; $this->assertEquals( [ - 'data' => [], + 'data' => $data, 'count' => 0, 'is_counter' => true, - 'key_map' => ['value' => 'Count'] + 'key_map' => [] ], $collector->collect() ); OrderShipped::dispatch(1); + $data[OrderShipped::class] = ['value' => 1]; $this->assertEquals( [ - 'data' => [ - OrderShipped::class => ['value' => 1] - ], + 'data' => $data, 'count' => 1, 'is_counter' => true, - 'key_map' => ['value' => 'Count'] + 'key_map' => [] ], $collector->collect() ); @@ -63,15 +64,13 @@ public function testItCollectsDispatchedJobs() dispatch(new SendNotification()); dispatch(new SendNotification()); + $data[SendNotification::class] = ['value' => 3]; $this->assertEquals( [ - 'data' => [ - OrderShipped::class => ['value' => 1], - SendNotification::class => ['value' => 3] - ], + 'data' => $data, 'count' => 4, 'is_counter' => true, - 'key_map' => ['value' => 'Count'] + 'key_map' => [] ], $collector->collect() ); diff --git a/tests/DataCollector/ModelsCollectorTest.php b/tests/DataCollector/ModelsCollectorTest.php index f47697d7..4247a8ea 100644 --- a/tests/DataCollector/ModelsCollectorTest.php +++ b/tests/DataCollector/ModelsCollectorTest.php @@ -15,12 +15,19 @@ class ModelsCollectorTest extends TestCase public function testItCollectsRetrievedModels() { $this->loadLaravelMigrations(); - debugbar()->boot(); /** @var \DebugBar\DataCollector\ObjectCountCollector $collector */ $collector = debugbar()->getCollector('models'); $collector->setXdebugLinkTemplate(''); + $collector->collectCountSummary(false); + $collector->setKeyMap([]); + $data = []; + + $this->assertEquals( + ['data' => $data, 'key_map' => [], 'count' => 0, 'is_counter' => true], + $collector->collect() + ); User::create([ 'name' => 'John Doe', @@ -34,46 +41,56 @@ public function testItCollectsRetrievedModels() 'password' => Hash::make('password'), ]); + $data[User::class] = ['created' => 2]; $this->assertEquals( [ - 'data' => [], - 'count' => 0, + 'data' => $data, + 'count' => 2, 'is_counter' => true, 'key_map' => [ - 'value' => 'Count' ], ], $collector->collect() ); - User::first(); + $user = User::first(); + + $data[User::class]['retrieved'] = 1; + $this->assertEquals( + ['data' => $data, 'key_map' => [], 'count' => 3, 'is_counter' => true], + $collector->collect() + ); + + $user->update(['name' => 'Jane Doe']); + $data[User::class]['updated'] = 1; $this->assertEquals( [ - 'data' => [ - User::class => ['value' => 1] - ], - 'count' => 1, + 'data' => $data, + 'count' => 4, 'is_counter' => true, - 'key_map' => [ - 'value' => 'Count' - ], + 'key_map' => [], ], $collector->collect() ); Person::all(); + $data[Person::class] = ['retrieved' => 2]; + $this->assertEquals( + ['data' => $data, 'key_map' => [], 'count' => 6, 'is_counter' => true], + $collector->collect() + ); + + $user->delete(); + + $data[User::class]['deleted'] = 1; $this->assertEquals( [ - 'data' => [ - User::class => ['value' => 1], - Person::class => ['value' => 2] - ], - 'count' => 3, + 'data' => $data, + 'count' => 7, 'is_counter' => true, 'key_map' => [ - 'value' => 'Count' ] ], $collector->collect()