Документация четко гласит:
Обратите внимание, что вы можете передавать только скалярные выражения в конструктор.
Но, тем не менее, есть другой возможный способ отобразить ваш результат в DTO - путем предоставления пользовательского режима гидратации :
В конце запроса укажите имя гидратора:
...
->getQuery()
->getResult('AgentHydrator');
Затем в файле конфигурации в orm
свойство задает сопоставления гидратора (Symfony ссылка на документ * ):
doctrine:
orm:
...
hydrators:
AgentHydrator: My\Bundle\Hydrators\Agent\AgentHydrator
И, наконец, укажите настраиваемый гидратор:
class AgentHydrator extends AbstractHydrator
{
/**
* {@inheritdoc}
*/
protected function hydrateAllData()
{
$result = [];
while ($data = $this->_stmt->fetch(\PDO::FETCH_OBJ)) {
$result[] = new AgentDTO($data);
}
return $result;
}
}