2

Symfony2 と DoctrineMongoDBBundle を使用して、MongoDB でリレーションを使用しようとしています。Doctrine MongoDB Object Document Mapper プレゼンテーションのスライド 49 によると、ユーザー オブジェクトを参照するには$User->setOrganization($Organization)、を割り当てるだけで十分です。ドキュメント$Organization::users[0]には、inversedBy および MappedBy オプションを使用する必要があると記載されています。私は同様のスキームを持っています (ユーザーはグループに属しています) が、両方の更新作業を取得できません:

$Group = new \MyVendor\MongoBundle\Document\Group();
$User = new \MyVendor\MongoBundle\Document\User();
$User->setGroup($Group);
/** @var \Doctrine\ODM\MongoDB\DocumentManager $dm */
$dm = $this->get('doctrine_mongodb')->getManager();
$dm->persist($Group);
$dm->persist($User);
$dm->flush();

MongoDB での結果:

グループ

{
   "_id": ObjectId("5043e24acdc2929a0500000d"),
}

ユーザー

{
   "_id": ObjectId("5043e24acdc2929a0500000c"),
   "group": {
     "$ref": "Group",
     "$id": ObjectId("5043e24acdc2929a0500000d"),
     "$db": "my_db" 
  }
}

src/MyVendor/MongoBundle/Document/User.php

<?php
namespace MyVendor\MongoBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document(repositoryClass="MyVendor\MongoBundle\Repository\UserRepository")
 */
class User
{
    /**
    * @MongoDB\Id
    */
    private $id;

    /**
     * @var
     * @MongoDB\ReferenceOne(targetDocument="Group", inversedBy="users")
     */
    private $group;

    /**
     * Set group
     *
     * @param MyVendor\MongoBundle\Document\Group $group
     * @return User
     */
    public function setGroup(\MyVendor\MongoBundle\Document\Group $group)
    {
        $this->group = $group;
        return $this;
    }
}

src/MyVendor/MongoBundle/Document/Group.php

<?php
namespace MyVendor\MongoBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document
 */
class Group
{

    /**
    * @MongoDB\Id
    */
    private $id;

    /**
     * @MongoDB\ReferenceMany(targetDocument="User", mappedBy="group")
     * @var User[]
     */
    private $users;

    public function __construct()
    {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add users
     *
     * @param MyVendor\MongoBundle\Document\User $users
     */
    public function addUsers(\MyVendor\MongoBundle\Document\User $users)
    {
        $this->users[] = $users;
    }
}
4

1 に答える 1