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レコードが生成されます。

実行すると、 1 つのレコード$qb->getArrayResult();のみが返されます。

$qb->getResult();例外を返すように実行すると:

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

他の42のレコードはどこで消えましたか?

4

1 に答える 1

2

コメントで述べたように、メインエンティティResultSetMappingの列を使用する場合Auto Increment、フィールドセットの結果にリストする必要があります。以下は、追加する必要があるすべての結合句にも適用され、教義が結果を適切にフォーマットできるようにする必要があります。

で追加された列の順序はaddFieldResult()、RAW クエリにリストされているものと同じである必要があります。

Doctrine のドキュメントの次の章のには、さらに参照するためのいくつかの優れたサンプルが含まれています。

于 2015-11-24T12:52:59.890 に答える