Doctrine 2 (Symfony) 自定义字段的结果集映射始终为空

3

我在Symfony 2存储库中执行以下本地查询:

$sql = "SELECT f.id, f.title, 'hi' AS custom_field FROM my_feed f";

$em = $this->getEntityManager();
$rsm = new \Doctrine\ORM\Query\ResultSetMapping($em);
$rsm->addEntityResult('MedicalCoreBundle:Feed', 'f');
$rsm->addFieldResult('f', 'id', 'id');
$rsm->addFieldResult('f', 'title', 'title');
$rsm->addFieldResult('f', 'custom_field', 'custom_field');

$query = $em->createNativeQuery($sql, $rsm);
$result = $query->getResult();

我已经在Feed实体中创建了非映射属性custom_field以及它的getter和setter getCustomFieldsetCustomField

映射字段被正确地填充,但是当我添加custom_field RSM时,我会收到以下错误:Notice: Undefined index: custom_field [...] in symfony\..\AbstractHydrator.php

实体代码

// non mapped field
private $custom_field;

public function getCustomField()
{
    return $this->custom_field;
}

public function setCustomField($number)
{
    $this->custom_field = (int) $number;

    return $this;
}

我在这里做错了什么吗?

1
只是一个建议:如果您将未映射的字段命名为customField(在实体中),会发生什么? - Julien Bourdic
1
它不再显示错误,但字段值始终为NULL。如果我使用$query->getArrayResult(),它可以工作。 - Romain Bruckert
添加 MedicalCoreBundle:Feed 实体代码。 - Max P.
我添加了代码。也尝试避免在实体、查询和rsm中使用驼峰或下划线(customfield),并使用setCustomfield,但仍然出现未定义索引错误。 - Romain Bruckert
2个回答

0

关于您的错误,您似乎在 custom_Field 的某个地方使用了大写字母F,而不是小写字母f


这是一个打字错误。我有正确的字段名称。请注意,它通过query->getArrayResult()进行填充。 - Romain Bruckert

0

您应该使用addScalarResult或者映射custom_field,而不是使用addFieldResult

...
$rsm->addScalarResult('custom_field', 'custom_field');
...

结果将如下所示

[
    [0=>entity, 'custom_field'=>custom_field value],
    [0=>entity, 'custom_field'=>custom_field value],
    ...
]

是的,但您在最后拥有不同的数据结构,并且必须手动注入实体... - Romain Bruckert
据我所知,现在有内部工具可以按照您想要的方式进行数据注入。 - Max P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接