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 与计数一起使用

Doctrine 2.0 结果集映射使用不正确?

ResultSetMapping addScalarResult 关联数组

更改分组时Hibernate中查询的不同返回类型

Doctrine 2:表单字段显示 Doctrine\Common\Collections\ArrayCollection@00 作为值

Symfony 5(Doctrine 2.9),Doctrine 不会为 ManyToOne 自引用关系生成迁移