0

Doctrine ODM (MongoDB) を使用しており、次のようなものがあります

  • Attendee資料
  • Answer資料
  • それぞれがAnswer1 つを参照しAttendeeます。(一対多の関係)

私は次のようなことをします

attendees = attendeeRepo.findby(whatever)

foreach(attendees as attendee)
    answers = attendee.getAnswers()

ここでの問題は、attendee.getAnswers()Doctrine ODM ごとに次のようなクエリを実行することです。

db.TicketAnswer.find({ 
    "attendee.$id": ObjectId("50ae80608ead0ea71e00008b") 
})

100 人の参加者がいる場合、このような 100 のクエリが実行されるためAnswers、ループの前にすべてをプリロードしようとしていました。しかし、それは私が期待したようには機能しませんでした。

これは 1 対多の関係であり、関係 ( ) の片側にAttendee多 ( ) をロードするように依頼したため、期待どおりに機能しなかったと思いAnswerます。私が反対のことをしている他のケースでは、プリロードは期待どおりに機能します。

そのような場合の最善の解決策が何であるかはわかりません。誰かが助けることができるアイデアを持っているなら。

4

1 に答える 1

0

この記事をチェックしてください: http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/priming-references.html

引用するには:

/** @Document */
class User
{
    /** @ReferenceMany(targetDocument="Account") */
    private $accounts;
}

-

$qb = $dm->createQueryBuilder('User')
    ->field('accounts')->prime(true)
    ->limit(100);
$query = $qb->getQuery();
$users = $query->execute();
于 2013-08-13T20:32:44.237 に答える