|
| 1 | +<?php |
| 2 | + |
| 3 | +namespace Illuminate\Tests\Integration\Database; |
| 4 | + |
| 5 | +use Illuminate\Database\Eloquent\Model; |
| 6 | +use Illuminate\Database\Schema\Blueprint; |
| 7 | +use Illuminate\Support\Facades\Schema; |
| 8 | + |
| 9 | +class EloquentAggregateTest extends DatabaseTestCase |
| 10 | +{ |
| 11 | + protected function defineDatabaseMigrationsAfterDatabaseRefreshed() |
| 12 | + { |
| 13 | + Schema::create('users', function (Blueprint $table) { |
| 14 | + $table->increments('id'); |
| 15 | + $table->integer('c'); |
| 16 | + $table->string('name'); |
| 17 | + $table->integer('balance')->nullable(); |
| 18 | + }); |
| 19 | + } |
| 20 | + |
| 21 | + public function testMinMax() |
| 22 | + { |
| 23 | + UserAggregateTest::create(['c' => 1, 'name' => 'test-name1', 'balance' => -1]); |
| 24 | + UserAggregateTest::create(['c' => 2, 'name' => 'test-name2', 'balance' => -1]); |
| 25 | + UserAggregateTest::create(['c' => 3, 'name' => 'test-name3', 'balance' => 0]); |
| 26 | + UserAggregateTest::create(['c' => 4, 'name' => 'test-name4', 'balance' => +1]); |
| 27 | + UserAggregateTest::create(['c' => 5, 'name' => 'test-name5', 'balance' => +2]); |
| 28 | + UserAggregateTest::create(['c' => 6, 'name' => 'test-name5', 'balance' => null]); |
| 29 | + |
| 30 | + $this->assertEquals(-1, UserAggregateTest::query()->min('balance')); |
| 31 | + $this->assertNull(UserAggregateTest::query()->where('name', 'no-name')->min('balance')); |
| 32 | + $this->assertEquals(1, UserAggregateTest::query()->where('c', '>', 3)->min('balance')); |
| 33 | + |
| 34 | + $this->assertEquals(2, UserAggregateTest::query()->max('balance')); |
| 35 | + $this->assertNull(UserAggregateTest::query()->where('name', 'no-name')->max('balance')); |
| 36 | + $this->assertEquals(0, UserAggregateTest::query()->where('c', '<', 4)->max('balance')); |
| 37 | + } |
| 38 | + |
| 39 | + public function testAvg() |
| 40 | + { |
| 41 | + UserAggregateTest::create(['c' => 1, 'name' => 'test-name1', 'balance' => -10]); |
| 42 | + UserAggregateTest::create(['c' => 2, 'name' => 'test-name2', 'balance' => -10]); |
| 43 | + UserAggregateTest::create(['c' => 3, 'name' => 'test-name3', 'balance' => 0]); |
| 44 | + UserAggregateTest::create(['c' => 4, 'name' => 'test-name4', 'balance' => +10]); |
| 45 | + UserAggregateTest::create(['c' => 5, 'name' => 'test-name5', 'balance' => +20]); |
| 46 | + UserAggregateTest::create(['c' => 6, 'name' => 'test-name5', 'balance' => null]); |
| 47 | + |
| 48 | + $this->assertEquals(2, UserAggregateTest::query()->avg('balance')); |
| 49 | + $this->assertNull(UserAggregateTest::query()->where('name', 'no-name')->avg('balance')); |
| 50 | + $this->assertEquals(15, UserAggregateTest::query()->where('c', '>', 3)->avg('balance')); |
| 51 | + |
| 52 | + $this->assertEquals(2, UserAggregateTest::query()->average('balance')); |
| 53 | + $this->assertNull(UserAggregateTest::query()->where('name', 'no-name')->average('balance')); |
| 54 | + $this->assertEquals(-10, UserAggregateTest::query()->where('c', '<', 3)->average('balance')); |
| 55 | + } |
| 56 | + |
| 57 | + public function testSum() |
| 58 | + { |
| 59 | + UserAggregateTest::create(['c' => 1, 'name' => 'name-1', 'balance' => -11]); |
| 60 | + UserAggregateTest::create(['c' => 2, 'name' => 'name-2', 'balance' => -10]); |
| 61 | + UserAggregateTest::create(['c' => 3, 'name' => 'name-3', 'balance' => 0]); |
| 62 | + UserAggregateTest::create(['c' => 4, 'name' => 'name-4', 'balance' => +12]); |
| 63 | + UserAggregateTest::create(['c' => 5, 'name' => 'name-5', 'balance' => null]); |
| 64 | + |
| 65 | + $this->assertEquals(-9, UserAggregateTest::query()->sum('balance')); |
| 66 | + $result = UserAggregateTest::query()->where('name', 'no-name')->sum('balance'); |
| 67 | + $this->assertNotNull($result); |
| 68 | + $this->assertEquals(0, $result); |
| 69 | + $this->assertEquals(2, UserAggregateTest::query()->where('c', '>', 1)->sum('balance')); |
| 70 | + } |
| 71 | +} |
| 72 | + |
| 73 | +class UserAggregateTest extends Model |
| 74 | +{ |
| 75 | + protected $table = 'users'; |
| 76 | + protected $fillable = ['name', 'c', 'balance']; |
| 77 | + public $timestamps = false; |
| 78 | +} |
0 commit comments