signifly /
laravel-builder-macros
| 1 | <?php |
||
| 2 | |||
| 3 | use Illuminate\Database\Eloquent\Builder; |
||
| 4 | use Illuminate\Support\Arr; |
||
| 5 | use Illuminate\Support\Str; |
||
| 6 | |||
| 7 | Builder::macro('whereLike', function ($columns, string $value) { |
||
| 8 | $this->where(function (Builder $query) use ($columns, $value) { |
||
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
Loading history...
|
|||
| 9 | foreach (Arr::wrap($columns) as $column) { |
||
| 10 | $query->when( |
||
| 11 | Str::contains($column, '.'), |
||
| 12 | |||
| 13 | // Relational searches |
||
| 14 | function (Builder $query) use ($column, $value) { |
||
| 15 | $parts = explode('.', $column); |
||
| 16 | $relationColumn = array_pop($parts); |
||
| 17 | $relationName = join('.', $parts); |
||
| 18 | |||
| 19 | return $query->orWhereHas( |
||
| 20 | $relationName, |
||
| 21 | function (Builder $query) use ($relationColumn, $value) { |
||
| 22 | $query->where($relationColumn, 'LIKE', "%{$value}%"); |
||
| 23 | } |
||
| 24 | ); |
||
| 25 | }, |
||
| 26 | |||
| 27 | // Default searches |
||
| 28 | function (Builder $query) use ($column, $value) { |
||
| 29 | return $query->orWhere($column, 'LIKE', "%{$value}%"); |
||
| 30 | } |
||
| 31 | ); |
||
| 32 | } |
||
| 33 | }); |
||
| 34 | |||
| 35 | return $this; |
||
| 36 | }); |
||
| 37 |