diff --git a/src/Eloquent/DocumentModel.php b/src/Eloquent/DocumentModel.php index d39a12401..965b1a444 100644 --- a/src/Eloquent/DocumentModel.php +++ b/src/Eloquent/DocumentModel.php @@ -5,7 +5,6 @@ namespace MongoDB\Laravel\Eloquent; use BackedEnum; -use Carbon\Carbon; use Carbon\CarbonInterface; use DateTimeInterface; use DateTimeZone; @@ -128,7 +127,7 @@ public function fromDateTime($value): UTCDateTime * * @param mixed $value */ - protected function asDateTime($value): Carbon + protected function asDateTime($value): DateTimeInterface { // Convert UTCDateTime instances to Carbon. if ($value instanceof UTCDateTime) { diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php new file mode 100644 index 000000000..a4dffb168 --- /dev/null +++ b/tests/DateTimeImmutableTest.php @@ -0,0 +1,43 @@ +<?php + +declare(strict_types=1); + +namespace MongoDB\Laravel\Tests\Eloquent; + +use Carbon\CarbonImmutable; +use Illuminate\Support\Facades\Date; +use MongoDB\Laravel\Tests\Models\Anniversary; +use MongoDB\Laravel\Tests\TestCase; + +use function assert; + +final class DateTimeImmutableTest extends TestCase +{ + protected function setUp(): void + { + parent::setUp(); + + Anniversary::truncate(); + } + + protected function tearDown(): void + { + Date::useDefault(); + + parent::tearDown(); + } + + public function testCanReturnCarbonImmutableObject(): void + { + Date::use(CarbonImmutable::class); + + Anniversary::create([ + 'name' => 'John', + 'anniversary' => new CarbonImmutable('2020-01-01 00:00:00'), + ]); + + $anniversary = Anniversary::sole(); + assert($anniversary instanceof Anniversary); + self::assertInstanceOf(CarbonImmutable::class, $anniversary->anniversary); + } +} diff --git a/tests/Models/Anniversary.php b/tests/Models/Anniversary.php new file mode 100644 index 000000000..fb78c9a55 --- /dev/null +++ b/tests/Models/Anniversary.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +namespace MongoDB\Laravel\Tests\Models; + +use Illuminate\Database\Eloquent\Model; +use MongoDB\Laravel\Eloquent\DocumentModel; +use MongoDB\Laravel\Eloquent\Model as Eloquent; +use MongoDB\Laravel\Query\Builder; + +/** + * @property string $name + * @property string $anniversary + * @mixin Eloquent + * @method static Builder create(...$values) + * @method static Builder truncate() + * @method static Eloquent sole(...$parameters) + */ +class Anniversary extends Model +{ + use DocumentModel; + + protected $keyType = 'string'; + protected $connection = 'mongodb'; + protected $table = 'anniversary'; + protected $fillable = ['name', 'anniversary']; + + protected $casts = ['anniversary' => 'immutable_datetime']; +}