2013-07-31 3 views
0

DoctrineMongoDB 번들과 함께 Symfony2를 사용하고 있습니다. JSON 형식 (객체)으로 정보를받는 서비스를 만들었습니다.Doctrine MongoDB ODM이 참조 된 객체의 상태를 변경하지 않습니다.

내가 보내는 개체에 데이터베이스의 다른 컬렉션에있는 다른 개체를 참조하기위한 속성이 있습니다.

참조가 변경됩니다. 그러나 ObjectB와 함께 "제목"과 같은 다른 필드를 보내는 경우에는 제목을 데이터베이스의 새 값으로 설정합니다. 이 문제를 어떻게 방지 할 수 있습니까?

그냥 새로운 참조를 설정하고, 해당 객체에 대한 조작이 필요하지 않습니다. 여기

일부 코드 (단축)

지금 서비스에 다음 JSON을 보내고있다
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은 ObjetClass 재미를 나타냅니다)

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

내 질문은 지금, 어떻게 내가 설정하고자하는 참조에 대한 새로운 주어진 "제목"을 무시합니까? ID222로 설정된 DB에 새 참조를 갖고 싶습니다.

도움이 될 것입니다. 감사합니다.

편집 :

이것은 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(); 
+0

당신의 JSON 페이로드를 복용 모델을 수정하고'은'플러시()를 수행하는 실제 코드를 공유 할 수 있습니까? JSON은 문서 구조와 직접적으로 일치하지 않으므로 관리되는 문서가 수정되는 방식을 볼 수 없습니다. – jmikola

+0

나는 내 게시물을 올렸다 – doggy

+0

예를 들어, 참조를 설정하는 것처럼 보이지 않습니다. Symfony 컴포넌트 또는 [Johannes '] (http://jmsyst.com/libs/serializer) 라이브러리를 사용하고 있는지 확실하지 않지만 비 직렬화는 각 클래스의 새 객체를 생성합니다. ODM JokesPattern은 캐스 캐 이드에 의해 지속되고 JokeEmbedded는 Fun 문서에 저장된 경우에만 참조를 포함합니다. setter 메소드가 있다면 JokeEmbedded의'$ title' 속성도 설정 될 수 있지만 말할 수는 없습니다. 필자는 필드를 제외시키기 위해 serializer 문서를 살펴볼 것을 제안합니다. – jmikola

답변

0

나는 직렬화 컨텍스트와 JMS SerializerBundle 내 목록 주석과 관리를 처리하는 코드이다.

인사말 :