Я делаю запрос с 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;
}