Doctrine MongoDB ODM不会更改引用对象的状态

时间:2013-07-31 11:59:14

标签: mongodb symfony reference doctrine odm

我正在将Symfony2与DoctrineMongoDB Bundle一起使用。我提供了一个接收JSON格式(对象)信息的服务。

我发送的对象有一个属性,用于引用数据库中不同集合中的另一个对象。

更改参考作品。但是如果我发送另一个字段,比如使用ObjectB的“title”,它会将标题设置为DataBase中的新值。我该如何防止这种情况?

我只想设置新的引用,不要对该Object进行任何操作。

这是一些代码(缩写)

class Fun{    
   /**
     * @MongoDB\Id(strategy="auto")
     */
    private $id;

   /** @MongoDB\EmbedMany(targetDocument="JokeEmbedded", strategy="set")
    */
   private $jokes = array();

}


class JokeEmbedded
{
    /**
     * @MongoDB\ReferenceOne(targetDocument="JokePattern", cascade={"persist"})
     */
    private $ref;

    /**
     * @MongoDB\String
     */
    private $title;
}

class JokePattern
{
    /**
     * @MongoDB\Id(strategy="AUTO")
     */
    private $id;

    /**
     * @MongoDB\String
     */
    private $title;
}

我现在将以下JSON发送到服务:( JSON代表ObjetClass乐趣)

[{"id":"1","jokes":[{"ref":{"id":"222", "title":"new title"}]]

我现在的问题是,如何忽略我想要设置的参考的新给定“标题”? 我希望将数据库中的新引用设置为ID 222.仅此而已。

任何帮助都会很棒! 谢谢!

编辑:

这是处理JSON输入的代码

$request = $this->getRequest();
//Get JSON-Data
$data = $request->getContent();
$funs = $this->get('serializer')->deserialize(
    $data,
    'ArrayCollection<Acme\FunBundle\Document\Fun>',
    'json'
);

//create documentmanager
$dm = $this->get('doctrine_mongodb')->getManager();

foreach ($funs as $obj) {
        //save to db
        $dm->persist($obj);
    }
$dm->flush();

1 个答案:

答案 0 :(得分:0)

我使用反序列化上下文和JMS SerializerBundle中的列表注释来管理它。

问候:)