У меня проблема с отношениями "многие ко многим"
У меня есть класс User, который может входить в несколько команд, и класс Team, который может иметь несколько пользователей
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 в команду и делаю getMembers
для экземпляра Team, это работает.НО, когда у меня есть экземпляр пользователя (это член команды), getTeams
ничего не возвращает (пустая коллекция PersistentCollection)
Ссылка хранится в документе команд в виде массива ссылок
"members" : [
{
"$ref" : "User",
"$id" : ObjectId("XXX"),
"$db" : "readDat"
}
],
Я не понимаю, с аннотациями, какими они являются сейчас, я думал, что Doctrine сделает что-то подобное db.getCollection('Team').find({"members.$id":ObjectId("XXX")})
, чтобы иметь команды, но, похоже, нет.
С другойстороны, я пытался инвертировать mappedBy
и inversedBy
, я не могу даже getMembers
(на объекте Team) или getTeams
(на объекте User) больше, оба являются пустой коллекцией.
Как я могу иметь хорошее «многие ко многим» (без дублирования ссылок в обоих документах)?