/**
* @param Fluent $statement
* @param Filtering|null $filtering
* @throws InvalidArgumentException
*/
private function applyFiltering(Fluent $statement, Filtering $filtering)
{
$targetedArgs = $filtering->getTargetedArgs();
foreach ($filtering->getFilters() as $filter) {
$args = array($filter);
if (!$filter instanceof Closure) {
foreach (str_split($this->connection->getWiringSchema($filter)) as $autowiredArg) {
if ($autowiredArg === 'e') {
$args[] = $filtering->getEntity();
} elseif ($autowiredArg === 'p') {
$args[] = $filtering->getProperty();
}
}
if (isset($targetedArgs[$filter])) {
$args = array_merge($args, $targetedArgs[$filter]);
}
}
$args = array_merge($args, $filtering->getArgs());
call_user_func_array(array($statement, 'applyFilter'), $args);
}
}