Проблема с сохраняющимися конкретными отношениями с Doctrine2 ODM

Я использую 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 (расширяет 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 получается хорошо. Но он никогда не появляется в самой базе данных (умирает сразу после установки и сбрасывается, чтобы убедиться, что он никогда не был случайно изменен где-либо) на конце 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
работает только на мировой стороне

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

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

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

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

Спасибо!

1 ответ

Решение

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

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

Другие вопросы по тегам