2011-12-29 63 views
0

在Doctrine ODM 1.0beta3中,我需要從Document中獲取@EmbeddedDocument,並將其放入另一個Document中。如何在Doctrine中複製和嵌入文檔(使用MongoDb)

但是,當我嘗試這樣做時,我得到了奇怪的結果。

有一種方法可以複製和嵌入式對象?

編輯:

的「奇怪」的結果是,該嵌入文檔的屬性插入旁邊的其他嵌入文檔。


更多細節:

我有一個@EmbedMany關係與幾個Job文檔Queue嵌入文檔:

Queue: -> [ Job, Job, Job] 

還有些Job■找另一Job@EmbedOne屬性調用$callback

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... 
} 

我想要做的是獲取$回調作業,向$ result哈希中添加一個值,並將該作業排入$ jobs數組()中。

我得到的是作業排入隊列,還有$ jobs數組中的$ result散列,就好像它是一個Job文檔。

工作從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

什麼是奇怪的結果? – 2012-01-03 19:08:24

回答

0

我覺得就像在任何其他語言,你會解決這個問題。

僅複製的對象:

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

我的理解是,PHP使對象而不是引用的副本,我已經在當地證實了它。

你得到了什麼奇怪的結果?如果您提供更多信息,我可以嘗試提供幫助。

乾杯!

相關問題