for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Spatie\QueryBuilder\Filters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use ReflectionObject;
class FiltersScope implements Filter
{
public function __invoke(Builder $query, $values, string $property): Builder
$scope = Str::camel($property);
$values = Arr::wrap($values);
$values = $this->resolveParameters($query, $values, $scope);
return $query->$scope(...$values);
}
protected function resolveParameters(Builder $query, $values, string $scope): array
$parameters = (new ReflectionObject($query->getModel()))
->getMethod('scope' . ucfirst($scope))
->getParameters();
foreach ($parameters as $parameter) {
if (! optional($parameter->getClass())->isSubclassOf(Model::class)) {
continue;
$model = $parameter->getClass()->newInstance();
$index = $parameter->getPosition() - 1;
$value = $values[$index];
if (is_numeric($value)) {
$values[$index] = $model::findOrFail($value);
return $values;