首页 > 解决方案 > 学说水合物未映射领域

问题描述

我正在使用 Doctrine 进行查询,该查询使用CASE WHEN如下方式计算自定义字段:

公共函数 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循环并手动设置属性:

/**
 * @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;
}

标签: symfonydoctrine

解决方案


也许 DTO 在这里可能有用:教义文档

基本上,您定义了一个未映射到模型的 PHP 类。然后,您可以选择您需要的内容并从 DQL 查询中触发此 PHP 类的对象的实例化。

希望这可以帮助 !


推荐阅读