Doctrine гидрат не картированное поле - PullRequest
0 голосов
/ 27 февраля 2020

Я делаю запрос с Doctrine, который вычисляет пользовательское поле, используя CASE WHEN, например:

publi c функция findLatestPaginator ($ page = 1, $ itemsPerPage) {$ qb = $ this-> createQueryBuilder ('n');

$qb = $qb
    ->select(['n AS news', 'CASE WHEN lu.id IS NOT NULL THEN 1 ELSE 0 END AS n.liked'])
    ->leftJoin('n.likingUsers', 'lu')
;

$qb = $qb
    ->orderBy('n.date', 'DESC')
    ->setFirstResult($itemsPerPage * ($page - 1))
    ->setMaxResults($itemsPerPage)
    ->getQuery()
;

return $qb->getResult();

}

В моей сущности у меня есть поле с именем $liked, которое не отображается. Можно ли сделать так, чтобы запрос (или гидратор?) Автоматически устанавливал поле для получающегося объекта?

Сейчас я делаю foreach l oop и вручную устанавливаю свойство:

/**
 * @return News[]
 */
private function convertNews(array $records)
{
    $newsList = [];

    foreach ($records as $record) {
        if (isset($record['liked'], $record['news'])) {
            /** @var News */
            $news        = $record['news'];
            $news->liked = boolval($record['liked']);
            $newsList[]  = $news;
        }
    }

    return $newsList;
}

1 Ответ

0 голосов
/ 02 марта 2020

Может быть, здесь может быть полезен DTO: doctrine документация

По сути, вы определяете класс PHP, который не отображается в вашей модели. Затем вы можете выбрать то, что вам нужно, и запустить создание экземпляра объекта этого PHP класса из запроса DQL.

Надеюсь, это поможет!

...