В презентации
Doctrine MongoDB Object Document Mapper (слайд 47) объекту User присваивается Организация, и у этой организации в массиве Users
автоматически появляется на него ссылка, что видно на 49 слайде.
В
документации сказано, что я должен использовать опции inversedBy и mappedBy.
У меня такая же зависимость(User и Groups) и я хочу повторить это, однако у меня не получается добиться автоматического обновления ссылок у зависимых объектов, далее код:
$Group = new \MyVendor\MongoBundle\Document\Group();<br>
$User = new \MyVendor\MongoBundle\Document\User();<br>
$User->setGroup($Group);<br>
/** @var \Doctrine\ODM\MongoDB\DocumentManager $dm */<br>
$dm = $this->get('doctrine_mongodb')->getManager();<br>
$dm->persist($Group);<br>
$dm->persist($User);<br>
$dm->flush();<br>
Результат в MongoDB:
Group{
"_id": ObjectId("5043e24acdc2929a0500000d"),
}
User{
"_id": ObjectId("5043e24acdc2929a0500000c"),
"group": {
"$ref": "Group",
"$id": ObjectId("5043e24acdc2929a0500000d"),
"$db": "my_db"
}
}
src/MyVendor/MongoBundle/Document/User.php
<?php<br>
namespace MyVendor\MongoBundle\Document;<br><br>
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;<br><br>
/**<br>
* @MongoDB\Document(repositoryClass="MyVendor\MongoBundle\Repository\UserRepository")<br>
*/<br>
class User<br>
{<br>
/**<br>
* @MongoDB\Id<br>
*/<br>
private $id;<br><br>
/**<br>
* @var<br>
* @MongoDB\ReferenceOne(targetDocument="Group", inversedBy="users")<br>
*/<br>
private $group;<br><br>
/**<br>
* Set group<br>
*<br>
* @param MyVendor\MongoBundle\Document\Group $group<br>
* @return User<br>
*/<br>
public function setGroup(\MyVendor\MongoBundle\Document\Group $group)<br>
{<br>
$this->group = $group;<br>
return $this;<br>
}<br>
}<br>
src/MyVendor/MongoBundle/Document/Group.php
<?php<br>
namespace MyVendor\MongoBundle\Document;<br><br>
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;<br><br>
/**<br>
* @MongoDB\Document<br>
*/<br>
class Group<br>
{<br><br>
/**<br>
* @MongoDB\Id<br>
*/<br>
private $id;<br><br>
/**<br>
* @MongoDB\ReferenceMany(targetDocument="User", mappedBy="group")<br>
* @var User[]<br>
*/<br>
private $users;<br><br>
public function __construct()<br>
{<br>
$this->users = new \Doctrine\Common\Collections\ArrayCollection();<br>
}<br><br>
/**<br>
* Add users<br>
*<br>
* @param MyVendor\MongoBundle\Document\User $users<br>
*/<br>
public function addUsers(\MyVendor\MongoBundle\Document\User $users)<br>
{<br>
$this->users[] = $users;<br>
}<br>
}<br>
Кросс-вопрос на stackoverflow