与Doctrine2 ODM保持特定关系的问题



我使用的是Doctrine 2 MongoDB ODM,除了1个特定关系外,所有工作都很好。令人费解的是,我在项目中有看似相同的关系,它们都工作得很好

namespace ProjectEntitiesWorld; // same NS as class, but this is after
// splitting functionality from Entity to MappedSuperclass, didn't work either
/**
 * @ReferenceOne(targetDocument="ProjectEntitiesWorld")
 * @var IWorld
 */
protected $world;

用于ProjectEntitiesPlayerCharacter (扩展上面提到的 ProjectEntitiesWorldObject)=>

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

当我设置$world变量时,它在PHP脚本中没问题。甚至$objectManager->refresh($character), $character->getWorld() === $world结果也很好。但它从来没有出现在数据库本身(死亡后设置它和冲洗,以确保它永远不会被意外的地方改变)在玩家角色的结束,只有在世界方面

另一方面

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

=>

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

简体版:
- PlayerCharacter:: $用户& lt; = = (1: N) = =>用户::$字符
(和所有其他)都很好,而只有
- PlayerCharacter::$world <==(1:N)==> world::$playerCharacters
仅在World端有效

看了好多天,没发现什么不同。

  • 尝试重命名属性名称,没有更改
  • 角色->世界的水合器条目看起来与其他角色相同
  • 当我半手动添加条目时(通过RockMongo),它工作得很好
  • 创建"世界"字段为NULL没有区别,{}它说"未定义的索引:$id",但我想这是一个预期的行为
  • 实体单独工作也很好,它实际上只是一个关系

有什么我错过了/忽略了,或者我能做些什么来发现为什么它没有得到坚持

(如果需要更多信息,将编辑文章)

谢谢!

问题是UoW中有很多条目有些包含World => null,有些包含World =>…,所以后者可能被覆盖了

在赋值前使用flush()解决了这个

最新更新