diff --git a/src/Query/Dumper/Concerns/DumpsQueryValues.php b/src/Query/Dumper/Concerns/DumpsQueryValues.php index 1371bbfc6a5..33ee299997c 100644 --- a/src/Query/Dumper/Concerns/DumpsQueryValues.php +++ b/src/Query/Dumper/Concerns/DumpsQueryValues.php @@ -2,6 +2,9 @@ namespace Statamic\Query\Dumper\Concerns; +use DateTimeInterface; +use Illuminate\Support\Carbon; + trait DumpsQueryValues { protected function dumpQueryArrayValues($array): string @@ -17,6 +20,10 @@ protected function dumpQueryArrayValues($array): string protected function dumpQueryValue($value): string { + if ($value instanceof DateTimeInterface) { + $value = Carbon::instance($value)->setTimezone(config('app.timezone')); + } + $this->bindings[] = $value; return '?'; diff --git a/tests/Query/FakesQueriesTest.php b/tests/Query/FakesQueriesTest.php index b06726433e7..ec93fcdb788 100644 --- a/tests/Query/FakesQueriesTest.php +++ b/tests/Query/FakesQueriesTest.php @@ -2,6 +2,7 @@ namespace Tests\Query; +use Illuminate\Support\Carbon; use PHPUnit\Framework\Attributes\Test; use Statamic\Facades\User; use Tests\TestCase; @@ -22,6 +23,21 @@ public function it_supports_to_raw_sql() $this->assertSame("select * from users where name = 'Jack'", $query->toRawSql()); } + #[Test] + public function it_converts_date_bindings_to_the_app_timezone_in_raw_sql() + { + Carbon::setTestNow('2026-07-04 10:00:00'); + + $query = User::query()->where('created_at', Carbon::today('Europe/Zurich')); + + $this->assertSame( + "select * from users where created_at = '2026-07-03 22:00:00'", + $query->toRawSql() + ); + + Carbon::setTestNow(); + } + #[Test] public function it_supports_dump_raw_sql() {