diff --git a/README.md b/README.md index 649eb33..a4adf19 100644 --- a/README.md +++ b/README.md @@ -1103,11 +1103,11 @@ $query->orWhereNotBoolean($column, bool $value); #### Like -With the `whereLike` scope you can compare a column to a (case-insensitive) value. +With the `whereLike` scope you can do case-(in)sensitive like comparisons between a column and a value. ```php -$query->whereLike($column, $value, $caseInsensitive = false); -$query->orWhereLike($column, $value, $caseInsensitive = false); +$query->whereLike($column, $value, $caseSensitive = false); +$query->orWhereLike($column, $value, $caseSensitive = false); ``` #### Between Symmetric diff --git a/src/Query/BuilderWhere.php b/src/Query/BuilderWhere.php index 5bf84b0..5fd3684 100644 --- a/src/Query/BuilderWhere.php +++ b/src/Query/BuilderWhere.php @@ -63,10 +63,11 @@ public function orWhereIntegerArrayMatches($column, string $query): static * * @param Expression|string $column * @param Expression|string $value + * @param bool $caseSensitive */ - public function orWhereLike($column, $value, bool $caseInsensitive = false): static + public function orWhereLike($column, $value, $caseSensitive = false): static { - return $this->whereLike($column, $value, $caseInsensitive, 'or'); + return $this->whereLike($column, $value, $caseSensitive, 'or', false); } /** @@ -181,13 +182,15 @@ public function whereIntegerArrayMatches($column, string $query): static * * @param Expression|string $column * @param Expression|string $value + * @param bool $caseSensitive * @param string $boolean + * @param bool $not */ - public function whereLike($column, $value, bool $caseInsensitive = false, $boolean = 'and'): static + public function whereLike($column, $value, $caseSensitive = false, $boolean = 'and', $not = false): static { $type = 'like'; - $this->wheres[] = compact('type', 'column', 'value', 'caseInsensitive', 'boolean'); + $this->wheres[] = compact('type', 'column', 'value', 'caseSensitive', 'boolean', 'not'); $this->addBinding($value); return $this; diff --git a/src/Query/GrammarWhere.php b/src/Query/GrammarWhere.php index 887d5d1..0c792b9 100644 --- a/src/Query/GrammarWhere.php +++ b/src/Query/GrammarWhere.php @@ -46,13 +46,13 @@ public function whereAny(Builder $query, $where): string /** * Compile a "like" clause. * - * @param array{caseInsensitive: bool, column: string, value: mixed} $where + * @param array{caseSensitive: bool, column: string, value: mixed} $where */ public function whereLike(Builder $query, $where): string { - return match ((bool) $where['caseInsensitive']) { - true => "{$this->wrap($where['column'])} ilike {$this->parameter($where['value'])}", - false => "{$this->wrap($where['column'])} like {$this->parameter($where['value'])}", + return match ($where['caseSensitive']) { + true => "{$this->wrap($where['column'])} like {$this->parameter($where['value'])}", + false => "{$this->wrap($where['column'])} ilike {$this->parameter($where['value'])}", }; } diff --git a/tests/Query/WhereTest.php b/tests/Query/WhereTest.php index 097bd90..7c7de50 100644 --- a/tests/Query/WhereTest.php +++ b/tests/Query/WhereTest.php @@ -99,7 +99,7 @@ public function testOrWhereLike(): void $this->getConnection()->table('example')->orWhereLike('str', 'OamekKIC', true)->orWhereLike('str', 'HmC3xURl', true)->get(); }); $this->assertEquals( - ['select * from "example" where "str" like ? or "str" like ?', 'select * from "example" where "str" ilike ? or "str" ilike ?'], + ['select * from "example" where "str" ilike ? or "str" ilike ?', 'select * from "example" where "str" like ? or "str" like ?'], array_column($queries, 'query'), ); $this->assertEquals( @@ -258,7 +258,7 @@ public function testWhereLike(): void $this->getConnection()->table('example')->whereLike('str', 'IcuC5Cqz', true)->get(); }); $this->assertEquals( - ['select * from "example" where "str" like ?', 'select * from "example" where "str" ilike ?'], + ['select * from "example" where "str" ilike ?', 'select * from "example" where "str" like ?'], array_column($queries, 'query'), ); $this->assertEquals(