@@ -622,17 +622,25 @@ public function testSubdocumentArrayAggregate()
622622 public function testAggregateGroupBy ()
623623 {
624624 DB ::table ('users ' )->insert ([
625- ['name ' => 'John Doe ' , 'role ' => 'admin ' , 'score ' => 1 ],
626- ['name ' => 'Jane Doe ' , 'role ' => 'admin ' , 'score ' => 2 ],
625+ ['name ' => 'John Doe ' , 'role ' => 'admin ' , 'score ' => 1 , ' active ' => true ],
626+ ['name ' => 'Jane Doe ' , 'role ' => 'admin ' , 'score ' => 2 , ' active ' => true ],
627627 ['name ' => 'Robert Roe ' , 'role ' => 'user ' , 'score ' => 4 ],
628628 ]);
629629
630630 $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->aggregateByGroup ('count ' );
631631 $ this ->assertInstanceOf (LaravelCollection::class, $ results );
632632 $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 2 ], (object ) ['role ' => 'user ' , 'aggregate ' => 1 ]], $ results ->toArray ());
633633
634+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->aggregateByGroup ('count ' , ['active ' ]);
635+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
636+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 1 ], (object ) ['role ' => 'user ' , 'aggregate ' => 0 ]], $ results ->toArray ());
637+
638+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->aggregateByGroup ('max ' , ['score ' ]);
639+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
640+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 2 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
641+
634642 if (! method_exists (Builder::class, 'countByGroup ' )) {
635- $ this ->markTestSkipped ('countBy* function require Laravel v11.38+ ' );
643+ $ this ->markTestSkipped ('*byGroup functions require Laravel v11.38+ ' );
636644 }
637645
638646 $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->countByGroup ();
@@ -656,6 +664,14 @@ public function testAggregateGroupBy()
656664 $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 1.5 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
657665 }
658666
667+ public function testAggregateByGroupException (): void
668+ {
669+ $ this ->expectException (InvalidArgumentException::class);
670+ $ this ->expectExceptionMessage ('Aggregating by group requires zero or one columns. ' );
671+
672+ DB ::table ('users ' )->aggregateByGroup ('max ' , ['foo ' , 'bar ' ]);
673+ }
674+
659675 public function testUpdateWithUpsert ()
660676 {
661677 DB ::table ('items ' )->where ('name ' , 'knife ' )
0 commit comments