public function applySorting($columns)
{
$this->updating();
$sorting = [];
foreach (is_array($columns) ? $columns : func_get_args() as $name => $column) {
if (!is_numeric($name)) {
$column = $name . ' ' . $column;
}
if (!preg_match('~\\s+(DESC|ASC)\\s*\\z~i', $column = trim($column))) {
$column .= ' ASC';
}
$sorting[] = $column;
}
if ($sorting) {
$dql = Strings::normalize($this->query->getDQL());
if (!preg_match('~^(.+)\\s+(ORDER BY\\s+((?!FROM|WHERE|ORDER\\s+BY|GROUP\\sBY|JOIN).)*)\\z~si', $dql, $m)) {
$dql .= ' ORDER BY ';
} else {
$dql .= ', ';
}
$this->query->setDQL($dql . implode(', ', $sorting));
}
$this->iterator = NULL;
return $this;
}