Completed
Push — master ( 8d1e92...895cf7 )
by
unknown
02:29 queued 01:10
created

FiltersCallback::__invoke()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
1
<?php
2
3
namespace Spatie\QueryBuilder\Filters;
4
5
use Illuminate\Database\Eloquent\Builder;
6
7
/**
8
 * FiltersCallback provides filtering based on a PHP callback.
9
 *
10
 * Such callback should follow signature of {@see \Spatie\QueryBuilder\Filters\Filter::__invoke()}:
11
 *
12
 * ```php
13
 * function (\Illuminate\Database\Eloquent\Builder $builder, mixed $value, string $property)
14
 * ```
15
 *
16
 * For example:
17
 *
18
 * ```php
19
 * QueryBuilder::for(Item::class)
20
 *     ->allowedFilters([
21
 *         AllowedFilter::callback('trashed', function (Builder $query, $value) {
22
 *             if ($value === 'only') {
23
 *                 return $query->onlyTrashed();
24
 *             }
25
 *
26
 *             if ($value === 'with') {
27
 *                 return $query->withTrashed();
28
 *             }
29
 *
30
 *             $query->withoutTrashed();
31
 *         }),
32
 *     ]);
33
 * ```
34
 *
35
 * @see \Spatie\QueryBuilder\AllowedFilter::callback()
36
 */
37
class FiltersCallback implements Filter
38
{
39
    /**
40
     * @var callable a PHP callback of the following signature:
41
     * `function (\Illuminate\Database\Eloquent\Builder $builder, mixed $value, string $property)`
42
     */
43
    private $callback;
44
45
    public function __construct($callback)
46
    {
47
        $this->callback = $callback;
48
    }
49
50
    /** {@inheritdoc} */
51
    public function __invoke(Builder $query, $value, string $property)
52
    {
53
        return call_user_func($this->callback, $query, $value, $property);
54
    }
55
}
56