Как дублировать и EmbeddedDocument в Doctrine (с MongoDb)

В Doctrine ODM 1.0beta3 мне нужно взять @EmbeddedDocument из документа и поместить его в другой документ.

Однако, когда я пытаюсь это сделать, я получаю странные результаты.

Есть способ дублировать и EmbeddedObject?

РЕДАКТИРОВАТЬ:

«Странный» результат заключается в том, что свойство этого встроенного документа вставляется вместе с другими встроенными документами.


Подробнее:

У меня есть встроенный документ Queue с несколькими документами Job в отношении @EmbedMany:

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

Что я пытаюсь сделать, так это получить задание $callback, добавить значение в хэш $result и поставить это задание в очередь в массиве $jobs().

Я получаю задание, поставленное в очередь, а также хэш $result в массиве $jobs, как если бы это был документ задания.

массив заданий из 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);

person Madarco    schedule 29.12.2011    source источник
comment
Что за странные результаты?   -  person Tyler Brock    schedule 03.01.2012


Ответы (1)


Я думаю, вы решите эту проблему так же, как и на любом другом языке.

Просто скопируйте объект:

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

Насколько я понимаю, php делает копию объекта вместо ссылки, и я подтвердил это локально.

Какие именно странные результаты вы получаете? Если вы предоставите дополнительную информацию, я могу попытаться помочь.

Ваше здоровье!

person Tyler Brock    schedule 03.01.2012