найти объекты вместо массивов из нативного SQL-запроса с доктриной (Symfony) - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь получить некоторые результаты из списка лидеров для обслуживания в формате json.

Мой фактический запрос, который работает, выглядит следующим образом:

...
$pos = 25 //some position
$cnx->beginTransaction();
        $cnx->executeQuery('SET @rownum := 0');
        $sql = "
        SELECT * FROM (
            SELECT @rownum := @rownum + 1 AS rank, id, name, birthdate, gamesplayed,country,city
            FROM board  ORDER BY score DESC
        ) as result 
        WHERE result.rank >= (" . $pos . "-10)  and result.rank <= (" . $pos . "+10)
        ORDER BY rank
        ";

$preresults = $cnx->executeQuery($sql);
$cnx->commit();

$results = $preresults->fetchAll();

запрос работает, но я потерял все типы полей (приведение), все значения в строковом формате.

Как получить значения в правильном типе, например, если я использую dql (объекты)?

Спасибо

1 Ответ

0 голосов
/ 25 марта 2019

вам нужно использовать класс ResultSetMappingBuilder следующим образом:

$rsm = new ResultSetMappingBuilder($this->entityManager);
$rsm->addRootEntityFromClassMetadata('App:YourEntity', 'y');
$sql = "SELECT * FROM (
        SELECT @rownum := @rownum + 1 AS rank, id, name, birthdate, gamesplayed,country,city
        FROM board  ORDER BY score DESC
    ) as result 
    WHERE result.rank >= (" . $pos . "-10)  and result.rank <= (" . $pos . "+10)
    ORDER BY rank";
$query = $this->entityManager->createNativeQuery($sql, $rsm);

return $query->getResult();

, который будет возвращать массив YourEntity []

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...