From 935136887211dbc56319ad6e6e9568d38062f540 Mon Sep 17 00:00:00 2001 From: Markus Hebenstreit Date: Sat, 10 Apr 2021 10:29:27 +0200 Subject: [PATCH 1/2] Added CarbonPeriod value type to Query\Builder->whereBetween --- src/Illuminate/Database/Query/Builder.php | 16 ++++++++-------- tests/Database/DatabaseQueryBuilderTest.php | 6 ++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index 710d0a3a568c..c82e663b344e 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -1110,12 +1110,12 @@ public function whereNotNull($columns, $boolean = 'and') * Add a where between statement to the query. * * @param string|\Illuminate\Database\Query\Expression $column - * @param array $values + * @param array|\Carbon\CarbonPeriod $values * @param string $boolean * @param bool $not * @return $this */ - public function whereBetween($column, array $values, $boolean = 'and', $not = false) + public function whereBetween($column, $values, $boolean = 'and', $not = false) { $type = 'between'; @@ -1148,10 +1148,10 @@ public function whereBetweenColumns($column, array $values, $boolean = 'and', $n * Add an or where between statement to the query. * * @param string $column - * @param array $values + * @param array|\Carbon\CarbonPeriod $values * @return $this */ - public function orWhereBetween($column, array $values) + public function orWhereBetween($column, $values) { return $this->whereBetween($column, $values, 'or'); } @@ -1172,11 +1172,11 @@ public function orWhereBetweenColumns($column, array $values) * Add a where not between statement to the query. * * @param string $column - * @param array $values + * @param array|\Carbon\CarbonPeriod $values * @param string $boolean * @return $this */ - public function whereNotBetween($column, array $values, $boolean = 'and') + public function whereNotBetween($column, $values, $boolean = 'and') { return $this->whereBetween($column, $values, $boolean, true); } @@ -1198,10 +1198,10 @@ public function whereNotBetweenColumns($column, array $values, $boolean = 'and') * Add an or where not between statement to the query. * * @param string $column - * @param array $values + * @param array|\Carbon\CarbonPeriod $values * @return $this */ - public function orWhereNotBetween($column, array $values) + public function orWhereNotBetween($column, $values) { return $this->whereNotBetween($column, $values, 'or'); } diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index 55b02d9b5ae8..f7f4f0f89c6d 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -673,6 +673,12 @@ public function testWhereBetweens() $builder->select('*')->from('users')->whereBetween('id', [new Raw(1), new Raw(2)]); $this->assertSame('select * from "users" where "id" between 1 and 2', $builder->toSql()); $this->assertEquals([], $builder->getBindings()); + + $builder = $this->getBuilder(); + $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()); } public function testWhereBetweenColumns() From 48ecc1d7da2181beba9402f36fb1545e87f855bd Mon Sep 17 00:00:00 2001 From: Markus Hebenstreit Date: Sat, 10 Apr 2021 10:43:53 +0200 Subject: [PATCH 2/2] Removed CarbonPeriod typehint and replaced it with native iterable type --- src/Illuminate/Database/Query/Builder.php | 16 ++++++++-------- tests/Database/DatabaseQueryBuilderTest.php | 5 +++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index c82e663b344e..5cacbbd6a021 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -1110,12 +1110,12 @@ public function whereNotNull($columns, $boolean = 'and') * Add a where between statement to the query. * * @param string|\Illuminate\Database\Query\Expression $column - * @param array|\Carbon\CarbonPeriod $values + * @param iterable $values * @param string $boolean * @param bool $not * @return $this */ - public function whereBetween($column, $values, $boolean = 'and', $not = false) + public function whereBetween($column, iterable $values, $boolean = 'and', $not = false) { $type = 'between'; @@ -1148,10 +1148,10 @@ public function whereBetweenColumns($column, array $values, $boolean = 'and', $n * Add an or where between statement to the query. * * @param string $column - * @param array|\Carbon\CarbonPeriod $values + * @param iterable $values * @return $this */ - public function orWhereBetween($column, $values) + public function orWhereBetween($column, iterable $values) { return $this->whereBetween($column, $values, 'or'); } @@ -1172,11 +1172,11 @@ public function orWhereBetweenColumns($column, array $values) * Add a where not between statement to the query. * * @param string $column - * @param array|\Carbon\CarbonPeriod $values + * @param iterable $values * @param string $boolean * @return $this */ - public function whereNotBetween($column, $values, $boolean = 'and') + public function whereNotBetween($column, iterable $values, $boolean = 'and') { return $this->whereBetween($column, $values, $boolean, true); } @@ -1198,10 +1198,10 @@ public function whereNotBetweenColumns($column, array $values, $boolean = 'and') * Add an or where not between statement to the query. * * @param string $column - * @param array|\Carbon\CarbonPeriod $values + * @param iterable $values * @return $this */ - public function orWhereNotBetween($column, $values) + public function orWhereNotBetween($column, iterable $values) { return $this->whereNotBetween($column, $values, 'or'); } diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index f7f4f0f89c6d..83cbf0702f85 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -679,6 +679,11 @@ public function testWhereBetweens() $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()); + + $builder = $this->getBuilder(); + $builder->select('*')->from('users')->whereBetween('id', collect([1, 2])); + $this->assertSame('select * from "users" where "id" between ? and ?', $builder->toSql()); + $this->assertEquals([0 => 1, 1 => 2], $builder->getBindings()); } public function testWhereBetweenColumns()