我的多对多关系有问题
我有一个可以在多个团队中使用的User类 和可以拥有多个用户的班级团队
class User
/**
* @var Collection
* @ODM\ReferenceMany(
* targetDocument="App\Model\Document\Team",
* mappedBy="members",
* strategy="setArray"
* )
*/
protected $teams;
class Team
/**
* @var Collection|null
* @ODM\ReferenceMany(
* targetDocument="App\Model\Document\User",
* inversedBy="teams",
* strategy="setArray",
* sort={"username": "asc"},
* cascade={"persist"}
* )
*/
protected $members;
有了这些注释,当我将成员User添加到团队中并且对Team的实例执行getMembers
时,它就可以工作。
但是,当我有一个User实例(它是团队的成员)时,getTeams
不返回任何内容(空PersistentCollection)
参考文献以参考文献数组的形式存储在团队文档中
"members" : [
{
"$ref" : "User",
"$id" : ObjectId("XXX"),
"$db" : "readDat"
}
],
我不明白,对于现在的注释,我认为Doctrine会做这样的事情db.getCollection('Team').find({"members.$id":ObjectId("XXX")})
拥有球队,但似乎没有。
另一方面,我尝试将mappedBy
和inversedBy
求逆,甚至getMembers
(在Team对象上)或getTeams
(在用户对象),它们都是空的Collection。
我怎样才能拥有一个很好的多对多(两个文档中的引用都没有重复)?