0

这是我的映射:

$rsm = new ResultSetMapping;
$rsm->addEntityResult('OOHMediaBundle:OfferItem', 'i');
    $rsm->addFieldResult('i', 'reserved_at', 'reservedAt');

$rsm->addJoinedEntityResult('OOHMediaBundle:Offer', 'o', 'i', 'offer');
    $rsm->addFieldResult('o', 'o_id', 'id');
    $rsm->addFieldResult('o', 'continue_from', 'continueFrom');
    $rsm->addFieldResult('o', 'continue_to', 'continueTo');

这是我的本机查询:

$qb = $this->registry->getEntityManager()->createNativeQuery(
    'SELECT i.reserved_at, o.id AS o_id, o.continue_from, o.continue_to
    FROM offer_item AS i
    LEFT JOIN offers AS o ON i.offer_id = o.id
    WHERE i.reserved_at IS NOT NULL
    ;',
    $rsm
);

如果上面的 SQL 被复制到 mysql 客户端它会产生43条记录。

执行$qb->getArrayResult();时只返回1条记录。

执行$qb->getResult();时返回异常:

[Symfony\Component\Debug\Exception\ContextErrorException]  
Notice: Undefined index: offer_id 

其他42条记录在哪里消失了?

4

1 回答 1

2

好吧,正如我在评论中提到的,使用主要实体ResultSetMappingAuto Increment列时需要在字段集结果中列出。以下内容也应适用于需要添加的每个连接子句,以便学说可以正确格式化结果。

添加的列的顺序addFieldResult()必须与 RAW 查询中列出的顺序相同。

Doctrine 文档中的以下章节示例包含一些很好的示例以供进一步参考。

于 2015-11-24T12:52:59.890 回答