Доктрина MongoDB ODM загружает ссылочные документы - PullRequest
0 голосов
/ 24 мая 2011

мой сценарий подробно, у меня есть один документ пользователя:

/** @Document(collection="user") */
class User
{
    /** @Id */
    private $id;

    /** @ReferenceMany(targetDocument="Pet") */
    private $pet;

    public function getPet()
    {
        return $this->pet;
    }
}

, и у меня есть один документ питомца:

/** @Document(collection="pet") */
class Pet
{
    /** @Id */
    private $id;

    /** @ReferenceMany(targetDocument="User") */
    private $user;

    public function getUser()
    {
        return $this->user;
    }
}

Соотношение много ко многим.Если я вызываю следующий код для существующего документа ...

$result = $this->_dbContainer->getDocumentManager()->getRepository('User')->findBy(array('id' => => 'XZTZHJ323LKFHGJKLHGFGHJK'));
print_r($result->toArray());

... он заканчивается бесконечным циклом.Сообщение об ошибке:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 112721921 bytes) in ...

Если я выполню следующий код:

var_dump($result->count());

Результат один / он существует (все в порядке).Var_dump из $ result-> current () имеет значение NULL.Метод getMongoData возвращает следующие данные (которые являются правильными):

Array ( [0] => Array ( [$ref] => example [$id] => MongoId Object ( [$id] => 4ddac7667294c79e17000002 ) [$db] => test ) )

Если я выполняю следующий код:

var_dump($result->current());

Результат является логическим (false).

Есть идеи?

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Попробуйте восстановить классы гидратора.

0 голосов
/ 25 мая 2011

Решение для получения одного объекта из ссылочной коллекции:

$pets = $this->user->getPets();     
if(!is_null($pets) && $pets->count() > 0) {
   $this->pet = $pets->first();
}

Самое большое обучение (благодаря @Phil):

Не пытайтесь использовать var_dump () или print_r () объекты прокси модели. Они содержат много рекурсивных ссылки и вы исчерпаете доступная память пытается сделать их как вывод.

С наилучшими пожеланиями, Stephan

0 голосов
/ 24 мая 2011

Если ваша модель выглядит примерно такмодельные прокси-объекты.Они содержат много рекурсивных ссылок, и вы исчерпаете доступную память, пытаясь отобразить их как выходные данные.

...