【问题标题】:How to duplicate and EmbeddedDocument in Doctrine (with MongoDb)如何在 Doctrine 中复制和嵌入文档(使用 MongoDb)
【发布时间】:2011-12-29 16:32:30
【问题描述】:

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

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

有没有办法复制和EmbeddedObject?

编辑:

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


更多细节:

我有一个 Queue 嵌入文档,其中有几个 Job 文档在 @EmbedMany 关系中:

Queue: -> [ Job, Job, Job]

还有一些Jobs 在名为@EmbedOne@EmbedOne 属性中还有另一个Job $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 array() 中。

我得到的是入队的 Job,还有 $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);

【问题讨论】:

  • 什么奇怪的结果?

标签: mongodb doctrine mongodb-php


【解决方案1】:

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

只需复制对象:

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

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

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

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 2020-03-08
    • 2012-12-20
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2018-07-27
    相关资源
    最近更新 更多