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();
당신의 JSON 페이로드를 복용 모델을 수정하고'은'플러시()를 수행하는 실제 코드를 공유 할 수 있습니까? JSON은 문서 구조와 직접적으로 일치하지 않으므로 관리되는 문서가 수정되는 방식을 볼 수 없습니다. – jmikola
나는 내 게시물을 올렸다 – doggy
예를 들어, 참조를 설정하는 것처럼 보이지 않습니다. Symfony 컴포넌트 또는 [Johannes '] (http://jmsyst.com/libs/serializer) 라이브러리를 사용하고 있는지 확실하지 않지만 비 직렬화는 각 클래스의 새 객체를 생성합니다. ODM JokesPattern은 캐스 캐 이드에 의해 지속되고 JokeEmbedded는 Fun 문서에 저장된 경우에만 참조를 포함합니다. setter 메소드가 있다면 JokeEmbedded의'$ title' 속성도 설정 될 수 있지만 말할 수는 없습니다. 필자는 필드를 제외시키기 위해 serializer 문서를 살펴볼 것을 제안합니다. – jmikola