Доктрина Symfony4 ODM - ManyToMany пустуют - PullRequest
0 голосов
/ 02 октября 2018

У меня проблема с отношениями "многие ко многим"

У меня есть класс 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) больше, оба являются пустой коллекцией.

Как я могу иметь хорошее «многие ко многим» (без дублирования ссылок в обоих документах)?

...