0

在 Doctrine ODM 1.0beta3 中,我需要从一个文档中获取一个 @EmbeddedDocument,并将其放入另一个文档中。

但是,当我尝试这样做时,会得到奇怪的结果。

有没有办法复制和EmbeddedObject?

编辑:

“奇怪”的结果是这个嵌入文档的属性被插入到其他嵌入文档旁边。


更多细节:

我有一个Queue嵌入文档,其中包含多个Job文档@EmbedMany

Queue: -> [ Job, Job, Job]

还有一些JobsJob在一个@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...
}

我要做的是获取 $callback 作业,将值添加到 $result 哈希并将此作业排入 $jobs 数组()中。

我得到的是排队的作业,还有 $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);
4

1 回答 1

0

我认为您会像使用任何其他语言一样解决这个问题。

只需复制对象:

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

我的理解是 php 会复制对象而不是引用,并且我已经在本地确认了它。

你到底得到了什么奇怪的结果?如果您提供更多信息,我可以尝试提供帮助。

干杯!

于 2012-01-03T19:49:59.937 回答