1 | <?php |
||||||
2 | |||||||
3 | namespace Traversify; |
||||||
4 | |||||||
5 | trait Traversify |
||||||
6 | { |
||||||
7 | public $search; # Search keyword (String) |
||||||
8 | |||||||
9 | public $filter; # Query filters (Array) |
||||||
10 | |||||||
11 | public $custom; # Custom queries |
||||||
12 | |||||||
13 | public $take; # For limited show (Integer) |
||||||
14 | |||||||
15 | public $order; # Order of list (Array) |
||||||
16 | |||||||
17 | public $range; # Range of query (Array) |
||||||
18 | |||||||
19 | public $limit; # Limit show - Paginate Prerequesit () |
||||||
20 | |||||||
21 | public $expose; # Returns all data (Uses get instead of paginate) |
||||||
22 | |||||||
23 | public $debug; # For testing; |
||||||
24 | |||||||
25 | private $query; # Query builder |
||||||
26 | |||||||
27 | |||||||
28 | public static function traversify($custom = NULL) |
||||||
29 | { |
||||||
30 | $_traverse = new self; |
||||||
31 | |||||||
32 | return $_traverse->traverse($custom); |
||||||
33 | } |
||||||
34 | |||||||
35 | |||||||
36 | public function traverse($custom = NULL) |
||||||
37 | { |
||||||
38 | $custom && $this->custom = $custom; |
||||||
39 | |||||||
40 | $this->__getters(); |
||||||
41 | |||||||
42 | \DB::enableQueryLog(); |
||||||
0 ignored issues
–
show
|
|||||||
43 | |||||||
44 | $result = $this->__queryBuilder(); |
||||||
45 | |||||||
46 | if($this->debug && env('APP_DEBUG')): |
||||||
0 ignored issues
–
show
The function
env was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
47 | |||||||
48 | return \DB::getQueryLog(); |
||||||
49 | |||||||
50 | else: |
||||||
51 | |||||||
52 | return $result; |
||||||
53 | |||||||
54 | endif; |
||||||
55 | } |
||||||
56 | |||||||
57 | private function __queryBuilder() |
||||||
58 | { |
||||||
59 | $this->query = $this->query(); |
||||||
0 ignored issues
–
show
It seems like
query() must be provided by classes using this trait. How about adding it as abstract method to this trait?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
60 | |||||||
61 | $queries = ['Search','Filter','Range', 'Order', 'Custom']; |
||||||
62 | |||||||
63 | self::loader($queries,'__query'); |
||||||
0 ignored issues
–
show
The method
Traversify\Traversify::loader() is not static, but was called statically.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
64 | |||||||
65 | return ($this->expose || $this->take) ? ['data' => $this->query->take($this->take)->get()] : $this->query->paginate($this->limit); |
||||||
66 | } |
||||||
67 | |||||||
68 | private function __queryCustom() |
||||||
69 | { |
||||||
70 | if(!isset($this->custom)) return; |
||||||
71 | |||||||
72 | $this->query->where($this->custom); |
||||||
73 | } |
||||||
74 | |||||||
75 | private function __querySearch() |
||||||
76 | { |
||||||
77 | if(!isset(self::$searchables)) return; |
||||||
0 ignored issues
–
show
|
|||||||
78 | |||||||
79 | $this->query->where( function($query) |
||||||
80 | { |
||||||
81 | foreach(self::$searchables ?: [] as $searchable): |
||||||
0 ignored issues
–
show
|
|||||||
82 | |||||||
83 | $_searchable = explode('~',$searchable); |
||||||
84 | |||||||
85 | if(count($_searchable)>1): |
||||||
86 | |||||||
87 | $query->with($_searchable[0])->orWhereHas($_searchable[0], function($query) use ( $_searchable ) |
||||||
88 | { |
||||||
89 | $query->where($_searchable[1],'LIKE','%'.$this->search.'%'); |
||||||
90 | }); |
||||||
91 | else: |
||||||
92 | $query->orWhere($searchable,'LIKE','%'.$this->search.'%'); |
||||||
93 | endif; |
||||||
94 | |||||||
95 | endforeach; |
||||||
96 | }); |
||||||
97 | } |
||||||
98 | |||||||
99 | private function __queryFilter() |
||||||
100 | { |
||||||
101 | if(!isset(self::$filterables)) return; |
||||||
0 ignored issues
–
show
|
|||||||
102 | |||||||
103 | $this->query->where(function($query) |
||||||
104 | { |
||||||
105 | foreach($this->filter ?: [] as $attribute => $value): |
||||||
106 | |||||||
107 | $value == 'null' && $value = null; |
||||||
108 | |||||||
109 | if(in_array($attribute, self::$filterables)): |
||||||
0 ignored issues
–
show
|
|||||||
110 | |||||||
111 | $relationship = explode('~', $attribute); |
||||||
112 | |||||||
113 | if(count($relationship) == 2): |
||||||
114 | |||||||
115 | if($value[0]=='!'): |
||||||
116 | |||||||
117 | $values = explode(',',substr($value,1)); |
||||||
118 | |||||||
119 | $value == 'null' && $value = null; |
||||||
0 ignored issues
–
show
|
|||||||
120 | |||||||
121 | $query->with($relationship[0])->whereHas($relationship[0],function($query) use ( $relationship, $values) |
||||||
122 | { |
||||||
123 | $query->whereNotIn($relationship[1],$values); |
||||||
124 | }); |
||||||
125 | |||||||
126 | else: |
||||||
127 | |||||||
128 | $values = explode(',',$value); |
||||||
129 | |||||||
130 | $query->with($relationship[0])->whereHas($relationship[0],function($query) use ( $relationship, $values, $value) |
||||||
131 | { |
||||||
132 | count($values) > 1 ? $query->whereIn($relationship[1],$values) : $query->where($relationship[1],$value); |
||||||
133 | }); |
||||||
134 | |||||||
135 | endif; |
||||||
136 | |||||||
137 | else: |
||||||
138 | if($value[0]=='!'): |
||||||
139 | |||||||
140 | $values = explode(',',substr($value,1)); |
||||||
141 | |||||||
142 | $query->where(function($query) use ($attribute, $values) |
||||||
143 | { |
||||||
144 | $query->whereNotIn($attribute,$values); |
||||||
145 | }); |
||||||
146 | |||||||
147 | else: |
||||||
148 | |||||||
149 | $values = explode(',',$value); |
||||||
150 | |||||||
151 | count($values) > 1 ? $query->whereIn($attribute,$values) : $query->where($attribute,$value); |
||||||
152 | |||||||
153 | endif; |
||||||
154 | |||||||
155 | endif; |
||||||
156 | |||||||
157 | endif; |
||||||
158 | |||||||
159 | endforeach; |
||||||
160 | }); |
||||||
161 | } |
||||||
162 | |||||||
163 | private function __queryRange() |
||||||
164 | { |
||||||
165 | if(!isset(self::$rangables)) return; |
||||||
0 ignored issues
–
show
|
|||||||
166 | |||||||
167 | $this->query->where(function($query) |
||||||
168 | { |
||||||
169 | foreach($this->range ?: [] as $attribute => $value): |
||||||
170 | |||||||
171 | if(in_array($attribute, self::$rangables)): |
||||||
0 ignored issues
–
show
|
|||||||
172 | |||||||
173 | $relationship = explode('~', $attribute); |
||||||
174 | |||||||
175 | if(count($relationship) == 2): |
||||||
176 | |||||||
177 | if($value[0]=='!'): |
||||||
178 | |||||||
179 | $values = explode(',',substr($value,1)); |
||||||
180 | |||||||
181 | $query->with($relationship[0])->whereHas($relationship[0],function($query) use ( $relationship, $values) |
||||||
182 | { |
||||||
183 | $query->whereNotBetween($relationship[1],$values); |
||||||
184 | }); |
||||||
185 | |||||||
186 | else: |
||||||
187 | |||||||
188 | $values = explode(',',$value); |
||||||
189 | |||||||
190 | $query->with($relationship[0])->whereHas($relationship[0],function($query) use ( $relationship, $values, $value) |
||||||
0 ignored issues
–
show
|
|||||||
191 | { |
||||||
192 | $query->whereBetween($relationship[1],$values); |
||||||
193 | }); |
||||||
194 | |||||||
195 | endif; |
||||||
196 | |||||||
197 | else: |
||||||
198 | |||||||
199 | if($value[0]=='!'): |
||||||
200 | |||||||
201 | $values = explode(',',substr($value,1)); |
||||||
202 | |||||||
203 | $query->where(function($q) use ($attribute, $values) |
||||||
204 | { |
||||||
205 | $q->whereNotBetween($attribute,$values); |
||||||
206 | }); |
||||||
207 | |||||||
208 | else: |
||||||
209 | |||||||
210 | $values = explode(',',$value); |
||||||
211 | |||||||
212 | $query->whereBetween($attribute,$values); |
||||||
213 | |||||||
214 | endif; |
||||||
215 | |||||||
216 | endif; |
||||||
217 | |||||||
218 | endif; |
||||||
219 | |||||||
220 | endforeach; |
||||||
221 | }); |
||||||
222 | } |
||||||
223 | |||||||
224 | private function __queryOrder() |
||||||
225 | { |
||||||
226 | if(!isset(self::$orderables)) return; |
||||||
0 ignored issues
–
show
|
|||||||
227 | |||||||
228 | foreach($this->order ?: [] as $attribute => $value): |
||||||
229 | |||||||
230 | if(in_array($attribute, self::$orderables)): |
||||||
231 | |||||||
232 | $relationship = explode('~', $attribute); |
||||||
233 | |||||||
234 | if(count($relationship) == 2): |
||||||
235 | |||||||
236 | $this->query->with([$relationship[0] => function($query) use ( $relationship, $value) |
||||||
237 | { |
||||||
238 | $query->orderBy($relationship[1],$value); |
||||||
239 | }]); |
||||||
240 | |||||||
241 | else: |
||||||
242 | |||||||
243 | $this->query->orderBy($attribute, $value); |
||||||
244 | |||||||
245 | endif; |
||||||
246 | |||||||
247 | endif; |
||||||
248 | |||||||
249 | endforeach; |
||||||
250 | } |
||||||
251 | |||||||
252 | private function __getters ( $getters = ['search', 'filter', 'take', 'order', 'range', 'limit', 'expose', 'debug'] ) |
||||||
253 | { |
||||||
254 | foreach($getters as $getter): |
||||||
255 | !$this->$getter && $this->$getter = request()->get($getter); |
||||||
0 ignored issues
–
show
The function
request was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
256 | endforeach; |
||||||
257 | } |
||||||
258 | |||||||
259 | private function loader($loads, $prefix = '__') |
||||||
260 | { |
||||||
261 | foreach($loads as $load): |
||||||
262 | |||||||
263 | self::{$prefix.$load}(); |
||||||
264 | |||||||
265 | endforeach; |
||||||
266 | } |
||||||
267 | } |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths