diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index 2103f6c906fe..9726de5aec2c 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -109,8 +109,13 @@ protected function whereLike(Builder $query, $where) protected function whereDate(Builder $query, $where) { $value = $this->parameter($where['value']); + $column = $this->wrap($where['column']); - return $this->wrap($where['column']).'::date '.$where['operator'].' '.$value; + if ($this->isJsonSelector($where['column'])) { + $column = '('.$column.')'; + } + + return $column.'::date '.$where['operator'].' '.$value; } /** @@ -123,8 +128,13 @@ protected function whereDate(Builder $query, $where) protected function whereTime(Builder $query, $where) { $value = $this->parameter($where['value']); + $column = $this->wrap($where['column']); + + if ($this->isJsonSelector($where['column'])) { + $column = '('.$column.')'; + } - return $this->wrap($where['column']).'::time '.$where['operator'].' '.$value; + return $column.'::time '.$where['operator'].' '.$value; } /** diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index 95142e0b698c..85cd68923c7c 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -593,6 +593,10 @@ public function testWhereDatePostgres() $builder = $this->getPostgresBuilder(); $builder->select('*')->from('users')->whereDate('created_at', new Raw('NOW()')); $this->assertSame('select * from "users" where "created_at"::date = NOW()', $builder->toSql()); + + $builder = $this->getPostgresBuilder(); + $builder->select('*')->from('users')->whereDate('result->created_at', new Raw('NOW()')); + $this->assertSame('select * from "users" where ("result"->>\'created_at\')::date = NOW()', $builder->toSql()); } public function testWhereDayPostgres() @@ -625,6 +629,11 @@ public function testWhereTimePostgres() $builder->select('*')->from('users')->whereTime('created_at', '>=', '22:00'); $this->assertSame('select * from "users" where "created_at"::time >= ?', $builder->toSql()); $this->assertEquals([0 => '22:00'], $builder->getBindings()); + + $builder = $this->getPostgresBuilder(); + $builder->select('*')->from('users')->whereTime('result->created_at', '>=', '22:00'); + $this->assertSame('select * from "users" where ("result"->>\'created_at\')::time >= ?', $builder->toSql()); + $this->assertEquals([0 => '22:00'], $builder->getBindings()); } public function testWherePast()