private function applyFiltering(Fluent $statement, Filtering $filtering)
{
$targetedArgs = $filtering->getTargetedArgs();
foreach ($filtering->getFilters() as $filter) {
$baseArgs = [];
if (!$filter instanceof Closure) {
foreach (str_split($this->connection->getWiringSchema($filter)) as $autowiredArg) {
if ($autowiredArg === 'e') {
$baseArgs[] = $filtering->getEntity();
} elseif ($autowiredArg === 'p') {
$baseArgs[] = $filtering->getProperty();
}
}
if (isset($targetedArgs[$filter])) {
$baseArgs = array_merge($baseArgs, $targetedArgs[$filter]);
}
}
$result = call_user_func_array([$statement, 'applyFilter'], array_merge([$filter], $baseArgs, $filtering->getArgs()));
if ($result instanceof FilteringResult) {
return new FilteringResultDecorator($result, $baseArgs);
}
}
}