2011-08-09 95 views
0

我正在使用Doctrine 2 MongoDB ODM,除1个特定关系外,所有工作都正常。什么是模糊的是,我在这个项目看似相同的关系,他们都工作得很好与Doctrine2 ODM保持特定关系的问题

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; 

在项目\实体使用\ PlayerCharacter(延伸项目\实体\上面提到的世界\对象) =>

namespace Project\Entities; 

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

当我设置$ world变量时,在PHP脚本中没问题。甚至$ objectManager->刷新($字符),$字符 - > getWorld()=== $世界变得很好。但它永远不会出现在数据库本身(设置后立即死亡和冲洗,以确保它永远不会被意外的地方改变)在PlayerCharacter结束,仅在世界侧

在另一方面

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

=>

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

工作

在简化版本:
- PlayerCharacter :: $用户< ==(1:N)==>用户:: $字符
(和所有其他)的罚款,而只有
- PlayerCharacter :: $世界< ==(1: N)==>世界:: $ playerCharacters
仅适用于世界各地

看着它很多天,找不到任何不同的东西。

  • 试图重命名的属性名称,没有任何变化
  • 字符
  • 保湿条目--->世界看起来相同他人
  • 当我半手动添加的条目(通过RockMongo),它工作正常
  • 创建“world”字段为NULL没有区别,{}它说“未定义的索引:$ id”,但我想这是一个预期的行为
  • 实体分别工作得很好,它真的只是这一个关系

有什么我很想念/忽视或我能做些什么来发现它为什么没有得到持续

(将编辑后,如果有需要获取更多信息)

谢谢!

回答

0

好,事情是有在UOW许多条目包含的一些世界=>零和一些世界=> ... WorldProxy,因此后者可能得到覆盖

使用冲水()转让前解决这