Проблема с сохранением определенных отношений с Doctrine2 ODM - PullRequest
0 голосов
/ 09 августа 2011

Я использую Doctrine 2 MongoDB ODM , все работает нормально, кроме 1 конкретного отношения.Что неясно, так это то, что у меня в проекте, казалось бы, одинаковые отношения, и они все прекрасно работают

namespace Project\Entities\World; // same NS as class, but this is after
// splitting functionality from Entity to MappedSuperclass, didn't work either

/**
 * @ReferenceOne(targetDocument="Project\Entities\World")
 * @var IWorld
 */
protected $world;

, используемых в Project \ Entities \ PlayerCharacter ( extends Project \ Entities \ World \ Object, упомянутыйвыше) =>

namespace Project\Entities;

/**
 * @Document(collection="worlds")
 * @HasLifecycleCallbacks
 */
class World {
    /**
 * @ReferenceMany(targetDocument="PlayerCharacter")
 * @var ArrayCollection
 */
protected $playerCharacters;
}

Когда я устанавливаю переменную $ world, все нормально в PHP-скрипте.Даже $ objectManager-> refresh ($ character), $ character-> getWorld () === $ world получается хорошо.Но он никогда не появляется в самой базе данных ( die сразу после его установки и сбрасывается, чтобы убедиться, что он никогда не был случайно изменен где-либо) на конце PlayerCharacter, только на мировой стороне

С другой стороны

class PlayerCharacter {
/**
 * @ReferenceOne(targetDocument="User")
 * @var User
 */
protected $user;
 }

=>

/**
 * @Document(collection="users")
 * @HasLifecycleCallbacks
 */
class User {
    /**
     * @ReferenceMany(targetDocument="PlayerCharacter")
     * @var ArrayCollection
     */
    protected $characters;
}

работает

В упрощенном варианте:
- PlayerCharacter :: $ user <== (1:N) ==> Пользователь :: $ символов
(и все остальные) в порядке, в то время как только
- PlayerCharacter :: $ world <== (1: N) ==> World :: $ playerCharacters
работает только на мировой стороне

Глядя на это много дней, не могу найти ничего другого.

  • Пробное переименование имен свойств, без изменений
  • Запись в гидраторедля персонажа ---> мир выглядит идентично другим
  • Когда я добавляю запись полуручно (через RockMongo), она отлично работает
  • Создание поля "мир" как NULL не имеет значения, с {} он говорит "Неопределенный индекс: $ id", но я предполагаю, что это ожидаемое поведение
  • Объекты работают отдельнотоже очень хорошо, это действительно только это одно отношение

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

(отредактируетсообщение, если есть необходимость в дополнительной информации)

Спасибо!

1 Ответ

0 голосов
/ 14 августа 2011

Хорошо, дело в том, что в UoW было много записей, некоторые из которых содержат World => null и некоторые World => ... WorldProxy, поэтому последний, вероятно, был перезаписан

Использование flush () перед назначениемрешил это

...