通过ObjectId()查询ReferenceOnce文档适用于一个但不是很多

时间:2012-01-24 14:08:26

标签: php mongodb doctrine symfony

我有两个文件,问题和答案。 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'

此查询返回预期的对象 - 一个答案 - 令我惊讶。


所以,我的问题是,我错过了什么?

我不想“嵌入”我的文档,虽然我已经读过这样查询嵌入式文档更容易。也许我可以将问题嵌入答案中。

1 个答案:

答案 0 :(得分:2)

Query::execute()DocumentRepository::findBy()的结果将返回一个Cursor,因此它不会包含对象内的任何实际数据。你确定它是空的吗?如果你开始迭代$ answers或$answers->count()它应该有效。