0

我正在使用 Doctrine ODM (MongoDB),我有类似以下的内容

  • Attendee文档
  • Answer文档
  • 每个Answer参考一个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在循环之前预加载所有查询。但它没有像我预期的那样工作。

我想它没有像我预期的那样工作,因为这是一个一对多的关系,我要求关系的一侧(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 回答