我正在使用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
)。在其他情况下,当我做相反的事情时,预加载会按预期工作。
看看这篇文章: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();