Feature: #32051 - Extbase Query expression builder for orderings
See forge#32051
Description
Extbase queries now support SQL function expressions in ORDER BY clauses through a new fluent API. This enables sorting results by computed values using functions like CONCAT, TRIM, and COALESCE.
New methods have been added to
\TYPO3\:
order- Sets a single ordering, replacing any existing orderingsBy () add- Adds an ordering to existing orderingsOrder By () concat- Creates a CONCAT expression() trim- Creates a TRIM expression() coalesce- Creates a COALESCE expression()
Examples
Order by concatenated fields:
$query = $this->myRepository->createQuery();
$query->orderBy(
$query->concat('firstName', 'lastName'),
QueryInterface::ORDER_ASCENDING
);
Order by trimmed field:
$query->orderBy(
$query->trim('title'),
QueryInterface::ORDER_DESCENDING
);
Order by first non-null value (fallback pattern):
$query->orderBy(
$query->coalesce('nickname', 'firstName'),
QueryInterface::ORDER_ASCENDING
);
Chain multiple orderings:
$query
->orderBy($query->concat('firstName', 'lastName'))
->addOrderBy('createdAt', QueryInterface::ORDER_DESCENDING);
Nest expressions:
$query->orderBy(
$query->concat(
$query->trim('firstName'),
$query->trim('lastName')
)
);
Backwards Compatibility
The existing
set method with array syntax continues to work:
$query->setOrderings([
'title' => QueryInterface::ORDER_ASCENDING,
'date' => QueryInterface::ORDER_DESCENDING,
]);
Impact
Developers can now use SQL functions in Extbase query orderings without resorting to raw SQL statements. This enables more flexible sorting logic while maintaining the abstraction and security benefits of the Extbase persistence layer.