From 35eb713fbc6b7cd5a74e95999d592983588cbb6c Mon Sep 17 00:00:00 2001 From: Ivan Mykhavko Date: Sat, 8 Apr 2023 15:04:53 +0300 Subject: [PATCH] fix query builder whereBetween method with carbon period --- src/Illuminate/Database/Query/Builder.php | 4 ++-- tests/Database/DatabaseQueryBuilderTest.php | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index 1df66bd37ed2..87d5ade2ee26 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -1253,7 +1253,7 @@ public function whereBetween($column, iterable $values, $boolean = 'and', $not = $type = 'between'; if ($values instanceof CarbonPeriod) { - $values = $values->toArray(); + $values = [$values->start, $values->end]; } $this->wheres[] = compact('type', 'column', 'values', 'boolean', 'not'); @@ -2232,7 +2232,7 @@ public function havingBetween($column, iterable $values, $boolean = 'and', $not $type = 'between'; if ($values instanceof CarbonPeriod) { - $values = $values->toArray(); + $values = [$values->start, $values->end]; } $this->havings[] = compact('type', 'column', 'values', 'boolean', 'not'); diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index e6e4885458ad..8fc7f1e013ed 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -769,7 +769,14 @@ public function testWhereBetweens() $period = now()->toPeriod(now()->addDay()); $builder->select('*')->from('users')->whereBetween('created_at', $period); $this->assertSame('select * from "users" where "created_at" between ? and ?', $builder->toSql()); - $this->assertEquals($period->toArray(), $builder->getBindings()); + $this->assertEquals([$period->start, $period->end], $builder->getBindings()); + + // custom long carbon period date + $builder = $this->getBuilder(); + $period = now()->toPeriod(now()->addMonth()); + $builder->select('*')->from('users')->whereBetween('created_at', $period); + $this->assertSame('select * from "users" where "created_at" between ? and ?', $builder->toSql()); + $this->assertEquals([$period->start, $period->end], $builder->getBindings()); $builder = $this->getBuilder(); $builder->select('*')->from('users')->whereBetween('id', collect([1, 2]));