我正在将Symfony2与DoctrineMongoDB捆绑包一起使用。我做了一个服务,接收JSON格式的信息(对象)。
我发送的对象有一个属性,用于引用数据库中不同集合中的另一个对象。
更改参考有效。但如果我发送另一个字段,比如ObjectB中的"title",它会将title设置为数据库中的新值。我该如何防止这种情况发生?
我只想设置新的引用,而不是对那个Object进行任何操作。
这是一些代码(简称)
class Fun{
/**
* @MongoDBId(strategy="auto")
*/
private $id;
/** @MongoDBEmbedMany(targetDocument="JokeEmbedded", strategy="set")
*/
private $jokes = array();
}
class JokeEmbedded
{
/**
* @MongoDBReferenceOne(targetDocument="JokePattern", cascade={"persist"})
*/
private $ref;
/**
* @MongoDBString
*/
private $title;
}
class JokePattern
{
/**
* @MongoDBId(strategy="AUTO")
*/
private $id;
/**
* @MongoDBString
*/
private $title;
}
我现在向服务发送以下JSON:(JSON表示ObjetClass Fun)
[{"id":"1","jokes":[{"ref":{"id":"222", "title":"new title"}]]
我现在的问题是,我如何忽略我想要设置的引用的新给定的"标题"?我希望将DB中的新引用设置为ID 222。没什么了。
任何帮助都将是伟大的!非常感谢。
编辑:
这是处理JSON输入的代码
$request = $this->getRequest();
//Get JSON-Data
$data = $request->getContent();
$funs = $this->get('serializer')->deserialize(
$data,
'ArrayCollection<AcmeFunBundleDocumentFun>',
'json'
);
//create documentmanager
$dm = $this->get('doctrine_mongodb')->getManager();
foreach ($funs as $obj) {
//save to db
$dm->persist($obj);
}
$dm->flush();
我使用JMS SerializerBundle中的反序列化上下文和列表注释来管理它。
问候语:)