我有两个文件,问题和答案。 Question类的$answers
属性定义为@MongoDB\ReferenceMany(targetDocument="Answer", cascade="all")
。 Answer类的$question
属性定义为@MongoDB\ReferenceOne(targetDocument="Question")
。这两个类的$id
属性都定义为@MongoDB\Id
。
我需要返回一个问题的所有答案的部分数组,例如以10个为一组。
我尝试了许多不同的方法,都有不同的结果。这些方法都没有产生我需要的东西。
查询问题仓库
$question = $this->getDocumentManager()
->getRepository(self::QUESTION_REPO)
->find($id);
$answers = array($questions->getAnswers());
那会给我答案,但不是10个。
查询答案回购(第1版)
$question = $this->getQuestion($id); // works just fine
$answers = $this->getDocumentManager()
->createQueryBuilder(self::ANSWER_REPO)
->field('question.$id')->equals(new \MongoId($question->getId()))
->getQuery()
->execute();
此查询将返回一个空对象。
查询答案回购(第2版)
$question = $this->getQuestion($id);
$answers = $this->getDocumentManager()
->createQueryBuilder(self::ANSWER_REPO)
->field('question')->references($question)
->getQuery()
->execute();
此查询也将返回一个空对象。
查询答案回购(第3版)
$question = $this->getQuestion($id);
$answers = $this->getDocumentManager()
->getRepository(self::ANSWER_REPO)
->findBy(array('question.id' => $question->getId()));
此查询也将返回一个空对象。
查询答案回购(第4版)
$question = $this->getQuestion($id);
$answer = $this->getDocumentManager()
->getRepository(self::ANSWER_REPO)
->findOneBy(array('question.id' => $question->getId()));
// note: 'question.id' and not 'question.$id'
此查询将返回预期的对象 - 一个答案 - 令我惊讶。
所以,我的问题是,我错过了什么?
我不想“嵌入”我的文档,虽然我已经读过这样查询嵌入式文档更容易。也许我可以将问题嵌入答案中。
答案 0 :(得分:2)
Query::execute()
和DocumentRepository::findBy()
的结果将返回一个Cursor,因此它不会包含对象内的任何实际数据。你确定它是空的吗?如果你开始迭代$ answers或$answers->count()
它应该有效。