Php 如何将联接映射到本机sql结果集中的联接
如何将联接映射到本机sql结果集中的联接 我想要一个结果集,其中的实体具有连接到连接的连接。当转储结果集时,我发现连接不正确。 结果集中第二个图元中的联接将联接到第一个图元。并且第二个实体中的连接为null。 但是,如果我省略了最深联接字段的映射,则联接将是正确的(除了缺少的字段) 关系Php 如何将联接映射到本机sql结果集中的联接,php,join,orm,doctrine-orm,Php,Join,Orm,Doctrine Orm,如何将联接映射到本机sql结果集中的联接 我想要一个结果集,其中的实体具有连接到连接的连接。当转储结果集时,我发现连接不正确。 结果集中第二个图元中的联接将联接到第一个图元。并且第二个实体中的连接为null。 但是,如果我省略了最深联接字段的映射,则联接将是正确的(除了缺少的字段) 关系 MyEntity ----> FooEntity ----> BarEntity sql结果 id some_field foo_id bar_id my_field 1 t
MyEntity ----> FooEntity ----> BarEntity
sql结果
id some_field foo_id bar_id my_field
1 testa 123 456 test1
1 testb 8823 998 test2
映射
$rsm->addEntityResult('MyEntity', 'a');
// first join
$rsm->addJoinedEntityResult('FooEntity', 'foo', 'a', 'foo');
// join to the first join
$rsm->addJoinedEntityResult('BarEntity', 'bar', 'foo', 'foo');
$rsm->addFieldResult('a', 'id', 'id')
->addFieldResult('a', 'some_field', 'someField')
->addFieldResult('foo', 'foo_id', 'id')
->addFieldResult('bar', 'bar_id', 'id');
打印
// if I disable this addFieldResult, the joins are correct, but myField === null
//$rsm->addFieldResult('bar', 'my_field', 'myField')
object(stdClass)[352]
public '__CLASS__' => string 'FooEntity' (length=42)
public 'id' => int 123
public 'bar' =>
object(stdClass)[446]
public '__CLASS__' => string 'BarEntity' (length=49)
public 'id' => string '456' (length=2)
public 'myField' => null
object(stdClass)[352]
public '__CLASS__' => string 'FooEntity' (length=42)
public 'id' => int 8823
public 'bar' =>
object(stdClass)[446]
public '__CLASS__' => string 'BarEntity' (length=49)
public 'id' => string '998' (length=2)
public 'myField' => null
// if I enable this addFieldResult, the joins are incorrect
$rsm->addFieldResult('bar', 'my_field', 'myField');
object(stdClass)[352]
public '__CLASS__' => string 'FooEntity' (length=42)
public 'id' => int 123
public 'bar' =>
object(stdClass)[446] |
public '__CLASS__' => string 'BarEntity' (length=49) | THE WRONG BarEntity
public 'id' => string '998' (length=2) |
public 'myField' => null |
object(stdClass)[352]
public '__CLASS__' => string 'FooEntity' (length=42)
public 'id' => int 8823
public 'bar' => null | IT SHOULD BE HERE
谢谢你的帮助
理查德解决了这个问题。所有这些都是关于字段映射的正确顺序。它们的顺序必须与sql相同。看见