我根据Doctrine Native Queries使用了Doctrine的本机查询功能。我使用存储过程来检索我想要的数据,并为其创建了一个实体就像包装一样,让我们称这个实体Foo
。这个实体有一个一对一的关联字段作为它是实体Bar
的主键。
但是,在存储过程中,我不会检索Bar
的Id字段,而这又导致不检索Foo
的主键,这将导致Doctrine的Hydrator({ {1}})由于Doctrine\ORM\Internal\Hydration\ObjectHydrator
的行null
而返回473
结果而不是真实结果。有没有办法解决这个问题,除了将ObjectHydrator
的主键添加到存储过程的结果中? (我会测试一下并报告回来)
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。这是一个错误还是我错过了什么?
答案 0 :(得分:0)
解决了Doctrine文档声明addMetaResult
的第三个参数应该是映射中提到的列名而不是字段名