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

时间:2011-08-09 04:39:54

标签: doctrine-orm object-persistence

我正在使用 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->刷新($ 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)==>世界:: $ playerCharacters
仅适用于世界方面

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

  • 尝试重命名属性名称,无需更改
  • 角色的水合器入口--->世界看起来与其他人相同
  • 当我半手动添加条目(通过RockMongo)时,它可以正常工作
  • 将“world”字段创建为NULL没有区别,{}它表示“Undefined index:$ id”,但我猜这是预期的行为
  • 实体也分别工作得很好,它真的就是这个关系

是否有任何我遗漏/被忽视的事情,或者我该怎么做以发现为什么它没有被持久化

(如果需要更多信息,将编辑帖子)

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,事情是UoW中有很多条目包含World => null和一些World => ...... WorldProxy,后者可能被覆盖了

在分配之前使用flush()解决了这个问题