/** * @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); } }
/** * @param Fluent $statement * @param Filtering|null $filtering * @return FilteringResult|null * @throws InvalidArgumentException */ 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); } } }