Как продублировать и внедрить документ в Doctrine (с MongoDb) - PullRequest
0 голосов
/ 29 декабря 2011

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

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

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

EDIT:

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


Подробнее:

У меня есть 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);

1 Ответ

0 голосов
/ 03 января 2012

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

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

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

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

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

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...