2011-12-29 2 views
0

Doctrine ODM 1.0beta3에서 Document에서 @EmbeddedDocument를 가져와 다른 문서에 넣어야합니다.Doctrine (MongoDb 포함)에서 EmbeddedDocument를 복제하는 방법

그러나 이것을 시도하면 이상한 결과가납니다.

중복 및 EmbeddedObject 방법이 있습니까?

편집 :

은 "이상한"결과가이 포함 된 문서의 속성이 다른 임베디드 문서와 함께 삽입되어 있다는 것입니다.


자세한 내용 :

Queue: -> [ Job, Job, Job] 

는 또한 일부 Job의이 @EmbedOne 속성이 $callback라는 또 다른 Job이 : 내가 @EmbedMany 관계에서 여러 Job 문서와 Queue 포함 된 문서가

:

class Job { 
    /** @EmbedOne(targetDocument="Cron\Model\Document\Job") */ 
    private $callback; 

    /** @Hash */ 
    private $result; 
} 

/* 
* @EmbeddedDocument 
*/ 
class Queue { 
    /** @EmbedMany(targetDocument="Cron\Model\Document\Job") */ 
    private $jobs = array(); 

    //Getters and setters... 
} 

$ callback Job을 가져 와서 $ result hash에 값을 추가하고 $ jobs 배열 ($)에이 Job을 대기열에 넣으려고합니다.

내가 얻은 것은 작업이 대기열에 들어간 것뿐 아니라 $ jobs 배열의 $ result 해시도 작업 문서 인 것처럼 보입니다. MongoDB의에서

작업 배열 :

... 
[2] => Array 
(
    [parameters] => Array 
    (
    [field] => office 
    [result] => "foo" 
) 
) 

[3] => Array 
(
    [_id] => 638 
    [parameters] => Array 
    (
    [field] => office 
    [result] => "foo" 
) 
) 

코드는 이것이다 :

$job = $queue->getLastJob(); 
$callback = $job->getCallback(); 
$params = $callback->getParameters(); 
$params['result'] = 'foo'; 
$callback->setParameters($params); 
$queue->addJobs($callback); 
+0

이상한 결과는 무엇입니까? –

답변

0

난 당신이 다른 언어에서와 마찬가지로이 문제를 해결 것이라고 생각합니다.

$some_obj["embedded_document"] = $other_obj["embedded_document"];

나의 이해는 PHP를 대신 참조의 객체의 복사본을 만들고 내가 로컬로 확인한 것입니다 :

그냥 객체를 복사합니다.

정확히 이상한 결과가 있습니까? 좀 더 자세한 정보를 제공하면 도움을 얻을 수 있습니다.

건배!