From 2cfe89cf59dee2416d76518241ebd87a571e3b6a Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Mon, 20 Jan 2025 13:29:19 +1300 Subject: [PATCH] Fix filtering `null` values in `where()` with Meilisearch --- src/Engines/MeilisearchEngine.php | 4 ++++ tests/Feature/Engines/MeilisearchEngineTest.php | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Engines/MeilisearchEngine.php b/src/Engines/MeilisearchEngine.php index ee8f2e8a..6de242d9 100644 --- a/src/Engines/MeilisearchEngine.php +++ b/src/Engines/MeilisearchEngine.php @@ -182,6 +182,10 @@ protected function filters(Builder $builder) return sprintf('%s=%s', $key, $value ? 'true' : 'false'); } + if (is_null($value)) { + return sprintf('%s %s', $key, 'IS NULL'); + } + return is_numeric($value) ? sprintf('%s=%s', $key, $value) : sprintf('%s="%s"', $key, $value); diff --git a/tests/Feature/Engines/MeilisearchEngineTest.php b/tests/Feature/Engines/MeilisearchEngineTest.php index 8c8053bf..fceaebfc 100644 --- a/tests/Feature/Engines/MeilisearchEngineTest.php +++ b/tests/Feature/Engines/MeilisearchEngineTest.php @@ -206,12 +206,13 @@ public function test_where_in_conditions_are_applied() $builder = new Builder(new SearchableUser, ''); $builder->where('foo', 'bar'); $builder->where('bar', 'baz'); + $builder->where('baz', null); $builder->whereIn('qux', [1, 2]); $builder->whereIn('quux', [1, 2]); $this->client->shouldReceive('index')->once()->with('users')->andReturn($index = m::mock(Indexes::class)); $index->shouldReceive('rawSearch')->once()->with($builder->query, array_filter([ - 'filter' => 'foo="bar" AND bar="baz" AND qux IN [1, 2] AND quux IN [1, 2]', + 'filter' => 'foo="bar" AND bar="baz" AND baz IS NULL AND qux IN [1, 2] AND quux IN [1, 2]', 'hitsPerPage' => $builder->limit, ]))->andReturn([]);