Kdyby\Doctrine\Helpers::separateParameters PHP Method

separateParameters() public static method

public static separateParameters ( Kdyby\Doctrine\QueryBuilder | Kdyby\Doctrine\NativeQueryBuilder $query, array $args ) : array
$query Kdyby\Doctrine\QueryBuilder | Kdyby\Doctrine\NativeQueryBuilder
$args array
return array
    public static function separateParameters($query, array $args)
    {
        for ($i = 0; array_key_exists($i, $args) && array_key_exists($i + 1, $args) && ($arg = $args[$i]); $i++) {
            if (!preg_match_all('~((\\:|\\?)(?P<name>[a-z0-9_]+))(?=(?:\\z|\\s|\\)))~i', $arg, $m)) {
                continue;
            }
            $repeatedArgs = [];
            foreach ($m['name'] as $l => $name) {
                if (isset($repeatedArgs[$name])) {
                    continue;
                }
                $value = $args[++$i];
                $type = NULL;
                if ($value instanceof \DateTime || $value instanceof \DateTimeImmutable) {
                    $type = Type::DATETIME;
                } elseif (is_array($value)) {
                    $type = Connection::PARAM_STR_ARRAY;
                }
                $query->setParameter($name, $value, $type);
                $repeatedArgs[$name] = TRUE;
                unset($args[$i]);
            }
        }
        return $args;
    }

Usage Example

 /**
  * {@inheritdoc}
  * @return NativeQueryBuilder
  */
 public function orWhere($where)
 {
     return call_user_func_array('parent::orWhere', Helpers::separateParameters($this, func_get_args()));
 }