Skip to content

Commit 28bf74c

Browse files
committed
PHPORM-234 Convert dates in DB Query results
1 parent 457971b commit 28bf74c

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

src/Query/Builder.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Illuminate\Support\Arr;
1515
use Illuminate\Support\Carbon;
1616
use Illuminate\Support\Collection;
17+
use Illuminate\Support\Facades\Date;
1718
use Illuminate\Support\LazyCollection;
1819
use InvalidArgumentException;
1920
use LogicException;
@@ -1646,6 +1647,8 @@ private function aliasIdForResult(array $values): array
16461647
foreach ($values as $key => $value) {
16471648
if (is_array($value)) {
16481649
$values[$key] = $this->aliasIdForResult($value);
1650+
} elseif ($value instanceof UTCDateTime) {
1651+
$values[$key] = Date::instance($value->toDateTime());
16491652
}
16501653
}
16511654

tests/QueryBuilderTest.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace MongoDB\Laravel\Tests;
66

7+
use Carbon\Carbon;
78
use DateTime;
89
use DateTimeImmutable;
910
use Illuminate\Support\Facades\Date;
@@ -33,7 +34,6 @@
3334
use function md5;
3435
use function sort;
3536
use function strlen;
36-
use function strtotime;
3737

3838
class QueryBuilderTest extends TestCase
3939
{
@@ -677,27 +677,31 @@ public function testUpdateSubdocument()
677677
public function testDates()
678678
{
679679
DB::table('users')->insert([
680-
['name' => 'John Doe', 'birthday' => new UTCDateTime(Date::parse('1980-01-01 00:00:00'))],
681-
['name' => 'Robert Roe', 'birthday' => new UTCDateTime(Date::parse('1982-01-01 00:00:00'))],
682-
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse('1983-01-01 00:00:00.1'))],
683-
['name' => 'Frank White', 'birthday' => new UTCDateTime(Date::parse('1960-01-01 12:12:12.1'))],
680+
['name' => 'John Doe', 'birthday' => Date::parse('1980-01-01 00:00:00')],
681+
['name' => 'Robert Roe', 'birthday' => Date::parse('1982-01-01 00:00:00')],
682+
['name' => 'Mark Moe', 'birthday' => Date::parse('1983-01-01 00:00:00.1')],
683+
['name' => 'Frank White', 'birthday' => Date::parse('1960-01-01 12:12:12.1')],
684684
]);
685685

686686
$user = DB::table('users')
687-
->where('birthday', new UTCDateTime(Date::parse('1980-01-01 00:00:00')))
687+
->where('birthday', Date::parse('1980-01-01 00:00:00'))
688688
->first();
689689
$this->assertEquals('John Doe', $user['name']);
690690

691691
$user = DB::table('users')
692-
->where('birthday', new UTCDateTime(Date::parse('1960-01-01 12:12:12.1')))
692+
->where('birthday', Date::parse('1960-01-01 12:12:12.1'))
693693
->first();
694694
$this->assertEquals('Frank White', $user['name']);
695+
$this->assertInstanceOf(Carbon::class, $user['birthday']);
696+
$this->assertSame('1960-01-01 12:12:12.100000', $user['birthday']->format('Y-m-d H:i:s.u'));
695697

696698
$user = DB::table('users')->where('birthday', '=', new DateTime('1980-01-01 00:00:00'))->first();
697699
$this->assertEquals('John Doe', $user['name']);
700+
$this->assertInstanceOf(Carbon::class, $user['birthday']);
701+
$this->assertSame('1980-01-01 00:00:00.000000', $user['birthday']->format('Y-m-d H:i:s.u'));
698702

699-
$start = new UTCDateTime(1000 * strtotime('1950-01-01 00:00:00'));
700-
$stop = new UTCDateTime(1000 * strtotime('1981-01-01 00:00:00'));
703+
$start = Carbon::parse('1950-01-01 00:00:00');
704+
$stop = Carbon::parse('1981-01-01 00:00:00');
701705

702706
$users = DB::table('users')->whereBetween('birthday', [$start, $stop])->get();
703707
$this->assertCount(2, $users);

0 commit comments

Comments
 (0)