From 85adce9c9d4c4296225d40fab3eebe809121f6ec Mon Sep 17 00:00:00 2001 From: Vincent Garnier Date: Sun, 30 Jun 2019 22:10:27 +0200 Subject: [PATCH] Fix and document "whereLike" macro wich only work on Eloquent Query Builder --- changelog.md | 5 +++++ readme.md | 4 +++- src/query-builder-macros.php | 11 ++++++----- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/changelog.md b/changelog.md index 09f1ba5..5df83e3 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,11 @@ Changelog ========= +2.2.1 (2019-06-30) +------------------ + +- Fix and document "whereLike" macro wich only work on Eloquent Query Builder + 2.2.0 (2019-04-30) ------------------ diff --git a/readme.md b/readme.md index 35410c2..e93872f 100644 --- a/readme.md +++ b/readme.md @@ -160,10 +160,12 @@ class User extends Model } ``` -### Query builder whereLike macro +### Eloquent Query builder whereLike macro Source : https://murze.be/searching-models-using-a-where-like-query-in-laravel +**Warning!** This only works correctly on instances of the *Eloquent Query Builder*, not on the generic Query Builder. + A replacement of this: ```php diff --git a/src/query-builder-macros.php b/src/query-builder-macros.php index e9bd0f3..12090c0 100644 --- a/src/query-builder-macros.php +++ b/src/query-builder-macros.php @@ -1,6 +1,7 @@ where(function (QueryBuilder $query) use ($attributes, $searchTerm) { + $this->where(function (EloquentQueryBuilder $query) use ($attributes, $searchTerm) { foreach (Arr::wrap($attributes) as $attribute) { $query->when(Str::contains($attribute, '.'), - function (QueryBuilder $query) use ($attribute, $searchTerm) { + function (EloquentQueryBuilder $query) use ($attribute, $searchTerm) { list($relationName, $relationAttribute) = explode('.', $attribute); - $query->orWhereHas($relationName, function (QueryBuilder $query) use ($relationAttribute, $searchTerm) { + $query->orWhereHas($relationName, function (EloquentQueryBuilder $query) use ($relationAttribute, $searchTerm) { $query->where($relationAttribute, 'LIKE', "%{$searchTerm}%"); }); }, - function (QueryBuilder $query) use ($attribute, $searchTerm) { + function (EloquentQueryBuilder $query) use ($attribute, $searchTerm) { $query->orWhere($attribute, 'LIKE', "%{$searchTerm}%"); } );