for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace N7olkachev\LaravelFilterable;
use N7olkachev\LaravelFilterable\Exceptions\FilterableException;
trait Filterable
{
public function scopeFilter($query, array $filterData = [])
foreach ($filterData as $key => $value) {
if (!$this->isFilterable($key)) {
throw new FilterableException("[$key] is not allowed for filtering");
}
if (is_null($value) || $value === '') continue;
$scopeName = ucfirst(camel_case($key));
if (method_exists($this, 'scope' . $scopeName)) {
$query->$scopeName($value);
} else if (is_array($value)) {
$query->whereIn($key, $value);
} else {
$query->where($key, $value);
protected function isFilterable($key)
$filterable = $this->filterable ?: [];
filterable
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
class MyClass { } $x = new MyClass(); $x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:
class MyClass { public $foo; } $x = new MyClass(); $x->foo = true;
return in_array($key, $filterable);
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: