|
7 | 7 | use Carbon\Carbon;
|
8 | 8 | use DateTime;
|
9 | 9 | use DateTimeImmutable;
|
| 10 | +use Illuminate\Support\Collection as LaravelCollection; |
10 | 11 | use Illuminate\Support\Facades\Date;
|
11 | 12 | use Illuminate\Support\Facades\DB;
|
12 | 13 | use Illuminate\Support\LazyCollection;
|
@@ -617,6 +618,35 @@ public function testSubdocumentArrayAggregate()
|
617 | 618 | $this->assertEquals(12, DB::table('items')->avg('amount.*.hidden'));
|
618 | 619 | }
|
619 | 620 |
|
| 621 | + public function testAggregateGroupBy() |
| 622 | + { |
| 623 | + DB::table('users')->insert([ |
| 624 | + ['name' => 'John Doe', 'role' => 'admin', 'score' => 1], |
| 625 | + ['name' => 'Jane Doe', 'role' => 'admin', 'score' => 2], |
| 626 | + ['name' => 'Robert Roe', 'role' => 'user', 'score' => 4], |
| 627 | + ]); |
| 628 | + |
| 629 | + $results = DB::table('users')->groupBy('role')->orderBy('role')->countByGroup(); |
| 630 | + $this->assertInstanceOf(LaravelCollection::class, $results); |
| 631 | + $this->assertEquals([(object) ['role' => 'admin', 'aggregate' => 2], (object) ['role' => 'user', 'aggregate' => 1]], $results->toArray()); |
| 632 | + |
| 633 | + $results = DB::table('users')->groupBy('role')->orderBy('role')->maxByGroup('score'); |
| 634 | + $this->assertInstanceOf(LaravelCollection::class, $results); |
| 635 | + $this->assertEquals([(object) ['role' => 'admin', 'aggregate' => 2], (object) ['role' => 'user', 'aggregate' => 4]], $results->toArray()); |
| 636 | + |
| 637 | + $results = DB::table('users')->groupBy('role')->orderBy('role')->minByGroup('score'); |
| 638 | + $this->assertInstanceOf(LaravelCollection::class, $results); |
| 639 | + $this->assertEquals([(object) ['role' => 'admin', 'aggregate' => 1], (object) ['role' => 'user', 'aggregate' => 4]], $results->toArray()); |
| 640 | + |
| 641 | + $results = DB::table('users')->groupBy('role')->orderBy('role')->sumByGroup('score'); |
| 642 | + $this->assertInstanceOf(LaravelCollection::class, $results); |
| 643 | + $this->assertEquals([(object) ['role' => 'admin', 'aggregate' => 3], (object) ['role' => 'user', 'aggregate' => 4]], $results->toArray()); |
| 644 | + |
| 645 | + $results = DB::table('users')->groupBy('role')->orderBy('role')->avgByGroup('score'); |
| 646 | + $this->assertInstanceOf(LaravelCollection::class, $results); |
| 647 | + $this->assertEquals([(object) ['role' => 'admin', 'aggregate' => 1.5], (object) ['role' => 'user', 'aggregate' => 4]], $results->toArray()); |
| 648 | + } |
| 649 | + |
620 | 650 | public function testUpdateWithUpsert()
|
621 | 651 | {
|
622 | 652 | DB::table('items')->where('name', 'knife')
|
|
0 commit comments