【发布时间】:2014-08-05 20:20:45
【问题描述】:
我按照本教程进行操作,一切正常:http://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/bidirectional-references.html
但是我更改了引用的存储位置。在上面的示例中,帖子包含一个用户。但我改变了它,所以用户会得到一系列帖子。保存工作正常。
但如果我加载一个用户并说$user->getPosts() 我得到零结果。如果我查看 mongodb,则不会保存任何引用。所以我把User中的注解改成了/** @ODM\ReferenceMany(targetDocument="BlogPost", cascade="all") */(注意这里的cascade="all"已经改了)。现在引用已保存到 mongodb。
如果我再次加载用户并说$user->getPosts(),我会收到以下错误消息:
Uncaught exception 'MongoCursorException' with message 'localhost:27017: Can't canonicalize query: BadValue $in needs an array' in
我在loadReferenceManyCollectionOwningSide() 方法中调试到Doctrine\ODM\MongoDB\Persisters\DocumentPersister,其中in 运算符得到构建(第697 行)。不幸的是,正如您在屏幕截图中看到的那样,一切似乎都很好。 in 运算符有一个数组。所以我无法想象出了什么问题?
编辑/更多信息:
所以我发现了更多。如果我将两个实体的映射更改为ReferenceMany,我可以加载$post->getUsers(),但不能加载$user->getPosts()。请注意,User 实体是拥有方。但是为什么???
【问题讨论】:
标签: php mongodb doctrine-orm doctrine