1 | <?php |
||
8 | trait SortsQuery |
||
9 | { |
||
10 | /** @var \Illuminate\Support\Collection */ |
||
11 | protected $allowedSorts; |
||
12 | |||
13 | public function allowedSorts($sorts): self |
||
14 | { |
||
15 | if ($this->request->sorts()->isEmpty()) { |
||
|
|||
16 | // We haven't got any requested sorts. No need to parse allowed sorts. |
||
17 | |||
18 | return $this; |
||
19 | } |
||
20 | |||
21 | $sorts = is_array($sorts) ? $sorts : func_get_args(); |
||
22 | |||
23 | $this->allowedSorts = collect($sorts)->map(function ($sort) { |
||
24 | if ($sort instanceof AllowedSort) { |
||
25 | return $sort; |
||
26 | } |
||
27 | |||
28 | return AllowedSort::field(ltrim($sort, '-')); |
||
29 | }); |
||
30 | |||
31 | if ($this->ensureAllSortsExist()) { |
||
32 | $this->addRequestedSortsToQuery(); // allowed is known & request is known, add what we can, if there is no request, -wait |
||
33 | } |
||
34 | |||
35 | return $this; |
||
36 | } |
||
37 | |||
38 | /** |
||
39 | * @param array|string|\Spatie\QueryBuilder\AllowedSort $sorts |
||
40 | * |
||
41 | * @return \Spatie\QueryBuilder\QueryBuilder |
||
42 | */ |
||
43 | public function defaultSort($sorts): self |
||
47 | |||
48 | /** |
||
49 | * @param array|string|\Spatie\QueryBuilder\AllowedSort $sorts |
||
50 | * |
||
51 | * @return \Spatie\QueryBuilder\QueryBuilder |
||
52 | */ |
||
53 | public function defaultSorts($sorts): self |
||
77 | |||
78 | protected function addRequestedSortsToQuery() |
||
91 | |||
92 | protected function findSort(string $property): ?AllowedSort |
||
99 | |||
100 | protected function ensureAllSortsExist(): bool |
||
122 | } |
||
123 |
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: