使用Doctrine2在没有定义关系的情况下在不同实体之间连接会导致意外结果

时间:2012-10-16 10:28:44

标签: orm doctrine-orm zend-framework2

我有两个实体,但是“逻辑”1:1关系,但是没有配置(他们不知道它们彼此相关)。

我不能只配置这种关系,因为根据这种情况会有很多旧代码(请参阅下面的进一步说明)。

现在,我正在尝试使用带有SELECT子句的简单LEFT JOIN查询手动解决此关系:

SELECT E1 as my_cool_entity_1, E2 as my_cool_entity_2
FROM Namespace\Of\Entity1 E1
LEFT JOIN Namespace\Of\Entity2 E2
WITH E2.someColumn = E1.someOtherColumn

在我的情况下,只有一行匹配E1,一行匹配E2上的联接。不知何故,我早就以这种方式使用了Doctrine,但我不记得在哪里以及如何。预期的结果是这样的数组:

[0 => [
    "my_cool_entity_1" => (Instance of E1),
    "my_cool_entity_2" => (Instance of E2)
]]

相反,数组看起来像这样:

[0 => [
        "my_cool_entity_1" => (Instance of E1)
    ], 
 1 => [
        "my_cool_entity_2" => (Instance of E2)
]]

如何让Doctrine像我期待的那样使阵列保持水合状态?提前谢谢!

注意:我写道,我无法定义这两个实体之间的关系。这是因为,如果定义了一个关系,Doctrine要求您在保存E1时将E2实例分配给E1 - 在我的旧代码中,但是,我是仅指定相关的 ID 。因此,Doctrine会忽略E2并导致约束错误。

1 个答案:

答案 0 :(得分:1)

没有关系的定义,学说不能知道它是oneToOne关系,所以结果永远是一个集合。你需要编写自己的保湿剂来实现这一目标。