EloquentModelDecimalCastingTest.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace Illuminate\Tests\Integration\Database\EloquentModelDecimalCastingTest;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Database\Schema\Blueprint;
  5. use Illuminate\Support\Facades\Schema;
  6. use Illuminate\Tests\Integration\Database\DatabaseTestCase;
  7. class EloquentModelDecimalCastingTest extends DatabaseTestCase
  8. {
  9. protected function defineDatabaseMigrationsAfterDatabaseRefreshed()
  10. {
  11. Schema::create('test_model1', function (Blueprint $table) {
  12. $table->increments('id');
  13. $table->decimal('decimal_field_2', 8, 2)->nullable();
  14. $table->decimal('decimal_field_4', 8, 4)->nullable();
  15. });
  16. }
  17. public function testDecimalsAreCastable()
  18. {
  19. $user = TestModel1::create([
  20. 'decimal_field_2' => '12',
  21. 'decimal_field_4' => '1234',
  22. ]);
  23. $this->assertSame('12.00', $user->toArray()['decimal_field_2']);
  24. $this->assertSame('1234.0000', $user->toArray()['decimal_field_4']);
  25. $user->decimal_field_2 = 12;
  26. $user->decimal_field_4 = '1234';
  27. $this->assertSame('12.00', $user->toArray()['decimal_field_2']);
  28. $this->assertSame('1234.0000', $user->toArray()['decimal_field_4']);
  29. $this->assertFalse($user->isDirty());
  30. $user->decimal_field_4 = '1234.1234';
  31. $this->assertTrue($user->isDirty());
  32. }
  33. }
  34. class TestModel1 extends Model
  35. {
  36. public $table = 'test_model1';
  37. public $timestamps = false;
  38. protected $guarded = [];
  39. public $casts = [
  40. 'decimal_field_2' => 'decimal:2',
  41. 'decimal_field_4' => 'decimal:4',
  42. ];
  43. }