我将 Symfony2 与 DoctrineMongoDB Bundle 一起使用。我创建了一个以 JSON 格式(对象)接收信息的服务。
我发送的对象有一个属性,用于引用数据库中不同集合中的另一个对象。
更改参考作品。但是,如果我发送另一个字段,例如 ObjectB 的“标题” - 它会将标题设置为数据库中的新值。我怎样才能防止这种情况?
我只想设置新的引用,而不是对该对象进行任何操作。
这是一些代码(缩短)
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();