Проблема с сохраняющимися конкретными отношениями с 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() до того, как назначение решит это