【问题标题】:Doctrine ResultSetMapping(Builder) is not showing any resultsDoctrine ResultSetMapping(Builder) 没有显示任何结果
【发布时间】: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());

不工作意味着:其中包含零项的数组。

【问题讨论】:

    标签: php doctrine-orm doctrine sqlresultsetmapping


    【解决方案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());
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2012-12-19
    相关资源
    最近更新 更多