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
![]() |
|||
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 |