@@ -41,6 +41,7 @@ class QueryBuilderTest extends TestCase
4141{
4242 public function tearDown (): void
4343 {
44+ DB ::table ('books ' )->truncate ();
4445 DB ::table ('users ' )->truncate ();
4546 DB ::table ('items ' )->truncate ();
4647 }
@@ -575,6 +576,12 @@ public function testAggregate()
575576 $ this ->assertEquals (3 , DB ::table ('items ' )->min ('amount ' ));
576577 $ this ->assertEquals (34 , DB ::table ('items ' )->max ('amount ' ));
577578 $ this ->assertEquals (17.75 , DB ::table ('items ' )->avg ('amount ' ));
579+ $ this ->assertTrue (DB ::table ('items ' )->exists ());
580+ $ this ->assertTrue (DB ::table ('items ' )->where ('name ' , 'knife ' )->exists ());
581+ $ this ->assertFalse (DB ::table ('items ' )->where ('name ' , 'ladle ' )->exists ());
582+ $ this ->assertFalse (DB ::table ('items ' )->doesntExist ());
583+ $ this ->assertFalse (DB ::table ('items ' )->where ('name ' , 'knife ' )->doesntExist ());
584+ $ this ->assertTrue (DB ::table ('items ' )->where ('name ' , 'ladle ' )->doesntExist ());
578585
579586 $ this ->assertEquals (2 , DB ::table ('items ' )->where ('name ' , 'spoon ' )->count ('amount ' ));
580587 $ this ->assertEquals (14 , DB ::table ('items ' )->where ('name ' , 'spoon ' )->max ('amount ' ));
@@ -1155,4 +1162,37 @@ public function testIdAlias($insertId, $queryId): void
11551162 $ result = DB ::table ('items ' )->where ($ queryId , '= ' , 'abc ' )->delete ();
11561163 $ this ->assertSame (1 , $ result );
11571164 }
1165+
1166+ public function testAggregateFunctionsWithGroupBy ()
1167+ {
1168+ DB ::table ('users ' )->insert ([
1169+ ['name ' => 'John Doe ' , 'role ' => 'admin ' , 'score ' => 1 ],
1170+ ['name ' => 'Jane Doe ' , 'role ' => 'admin ' , 'score ' => 2 ],
1171+ ['name ' => 'Robert Roe ' , 'role ' => 'user ' , 'score ' => 4 ],
1172+ ]);
1173+
1174+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->count ();
1175+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
1176+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 2 ], (object ) ['role ' => 'user ' , 'aggregate ' => 1 ]], $ results ->toArray ());
1177+
1178+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->max ('score ' );
1179+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
1180+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 2 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
1181+
1182+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->min ('score ' );
1183+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
1184+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 1 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
1185+
1186+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->sum ('score ' );
1187+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
1188+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 3 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
1189+
1190+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->avg ('score ' );
1191+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
1192+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 1.5 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
1193+
1194+ $ results = DB ::table ('users ' )->groupBy ('role ' )->orderBy ('role ' )->average ('score ' );
1195+ $ this ->assertInstanceOf (LaravelCollection::class, $ results );
1196+ $ this ->assertEquals ([(object ) ['role ' => 'admin ' , 'aggregate ' => 1.5 ], (object ) ['role ' => 'user ' , 'aggregate ' => 4 ]], $ results ->toArray ());
1197+ }
11581198}
0 commit comments