@@ -41,6 +41,7 @@ class QueryBuilderTest extends TestCase
41
41
{
42
42
public function tearDown (): void
43
43
{
44
+ DB ::table ('books ' )->truncate ();
44
45
DB ::table ('users ' )->truncate ();
45
46
DB ::table ('items ' )->truncate ();
46
47
}
@@ -575,6 +576,12 @@ public function testAggregate()
575
576
$ this ->assertEquals (3 , DB ::table ('items ' )->min ('amount ' ));
576
577
$ this ->assertEquals (34 , DB ::table ('items ' )->max ('amount ' ));
577
578
$ 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 ());
578
585
579
586
$ this ->assertEquals (2 , DB ::table ('items ' )->where ('name ' , 'spoon ' )->count ('amount ' ));
580
587
$ this ->assertEquals (14 , DB ::table ('items ' )->where ('name ' , 'spoon ' )->max ('amount ' ));
@@ -1155,4 +1162,37 @@ public function testIdAlias($insertId, $queryId): void
1155
1162
$ result = DB ::table ('items ' )->where ($ queryId , '= ' , 'abc ' )->delete ();
1156
1163
$ this ->assertSame (1 , $ result );
1157
1164
}
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
+ }
1158
1198
}
0 commit comments