0
我使用Symfony2和DoctrineMongoDB Bundle。我提供了一種以JSON格式(對象)接收信息的服務。學說MongoDB ODM不改變參考對象的狀態
我要發送的對象有一個屬性,用於引用數據庫中不同集合中的另一個對象。
更改參考作品。但是,如果我發送另一個字段,如ObjectB中的「title」,它會將標題設置爲DataBase中的新值。我怎樣才能防止這一點?
我只想設置新的引用,對該對象沒有任何操作。
下面是一些代碼(縮短)
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();
你可以分享採取JSON有效載荷,修改模型和執行'flush()'的實際代碼嗎? JSON不直接匹配文檔結構,所以我們仍然沒有看到您的託管文檔如何被修改。 – jmikola
我修改了我的帖子 – doggy
在你的例子中,它看起來並不像你正在設置一個參考。我不確定你是否使用Symfony組件或[Johannes'](http://jmsyst.com/libs/serializer))庫,但是反序列化正在構造每個類的新對象。 ODM JokePattern會被級聯持久化,並且JokeEmbedded在存儲在Fun文檔中時將只包含一個引用。如果你有一個setter方法,JokeEmbedded上的'$ title'屬性也可能被設置,但我不能說。我建議查看序列化器文檔以排除字段。 – jmikola