Doctrine ResultSetMapping(Builder) 没有显示任何结果
Posted
技术标签:
【中文标题】Doctrine ResultSetMapping(Builder) 没有显示任何结果【英文标题】:Doctrine ResultSetMapping(Builder) is not showing any results 【发布时间】:2020-11-15 21:07:50 【问题描述】:我的正常查询是这样的。
$qb = $placeRepository->createQueryBuilder('p');
var_dump($qb->getQuery()->getResult());
我会得到很少的结果作为对象。 所以这是正常行为。
然后我想用ResultSetMapping
添加一个自定义字段。
$qb = $placeRepository->createQueryBuilder('p');
$qb->addSelect('123 as distance');
$rsm = new ResultSetMapping;
$rsm->addEntityResult(Place::class, 'p');
$rsm->addFieldResult('p', 'id', 'id');
$rsm->addScalarResult('distance', 'distance');
var_dump($qb->getQuery()->setResultSetMapping($rsm)->getResult());
ResultSetMappingBuilder
也不起作用。
$qb = $placeRepository->createQueryBuilder('p');
$qb->addSelect('123 as distance');
$rsm = $placeRepository->createResultSetMappingBuilder('p');
var_dump($qb->getQuery()->setResultSetMapping($rsm)->getResult());
不工作意味着:其中包含零项的数组。
【问题讨论】:
【参考方案1】:好的,找到了。 但没有像我想要的那样工作?
/** @var \Doctrine\ORM\EntityManager $em */
$em = $this->getDoctrine()->getManager();
// Working but bad because defining all by yourself
$rsm = new ResultSetMapping();
$rsm->addEntityResult(Place::class, 'p');
$rsm->addFieldResult('p','p_id','id');
// Good
$rsmB = new ResultSetMappingBuilder($em);
$rsmB->addRootEntityFromClassMetadata(Place::class, 'p');
// Not working because separate field
//$rsmB->addScalarResult('distance', 'distance');
// Not working because not found ... (not a @ORM\Column)
$rsmB->addFieldResult('p', 'distance', 'distance');
我添加了 cmets 为什么它不起作用。
现在我要循环了?
【讨论】:
试试这个var_dump($qb->getQuery()->select($rsmB->generateSelectClause())->setResultSetMapping($rsm)->getResult());
以上是关于Doctrine ResultSetMapping(Builder) 没有显示任何结果的主要内容,如果未能解决你的问题,请参考以下文章
symfony2 / 学说:如何将 ResultSetMapping 与计数一起使用
ResultSetMapping addScalarResult 关联数组
Doctrine 2:表单字段显示 Doctrine\Common\Collections\ArrayCollection@00 作为值