保护使用原则本机查询生成的对象,而不使用它的ID字段

时间:2015-02-07 08:26:21

标签: mysql symfony doctrine-orm

我根据Doctrine Native Queries使用了Doctrine的本机查询功能。我使用存储过程来检索我想要的数据,并为其创建了一个实体就像包装一样,让我们​​称这个实体Foo。这个实体有一个一对一的关联字段作为它是实体Bar的主键。 但是,在存储过程中,我不会检索Bar的Id字段,而这又导致不检索Foo的主键,这将导致Doctrine的Hydrator({ {1}})由于Doctrine\ORM\Internal\Hydration\ObjectHydrator的行null而返回473结果而不是真实结果。有没有办法解决这个问题,除了将ObjectHydrator的主键添加到存储过程的结果中? (我会测试一下并报告回来)


尝试添加Bar Entity主键的结果:

Bar的映射元数据:

Foo

#Foo.orm.yml
Symf\TestBundle\Entity\Foo:
    type: entity
    id: 
        bar:
            associationKey: true
    oneToOne:
        bar:
            targetEntity: Symf\TestBundle\Entity\Bar
            joinColumn:
                name: bar_ID
                referencedColumnName: id  

因此,在我的#Bar.orm.yml Symf\TestBundle\Entity\Bar: type: Entity id: id: type: integer generator: strategy: IDENTITY 实例中,将StoredProcedure的数据映射到Foo Entity,我使用了以下代码:

ResultSetMapping

最后一个参数表示这是Foo实体的主键。 但现在我收到以下错误:

  

未定义索引:/ path / to / doctrine /orm/lib/Doctrine/ORM/UnitOfWork.php第2532行中的bar_ID

" bar_ID"是Foo映射中指定的$rsm = new ResultSetMapping(); $rsm->addEntityResult("Symf\\TestBundle\\Entity\\Foo", 'f') ->addMetaResult('f', 'Bar_SQL_column_name_in_stored_procedure', 'bar', true); 的名称。 这对我来说似乎是个错误,因为在使用自定义joinColumn时,教义应该忽略columnNames。这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

解决了Doctrine文档声明addMetaResult的第三个参数应该是映射中提到的列名而不是字段名