0

我正在使用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 端的数据库本身中(在设置后立即死亡并刷新以确保它不会在某处意外更改),仅出现在 World 端

另一方面

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)==> User::$characters
(和所有其他人)都可以,而只有
- PlayerCharacter::$world <==(1:N) ==> World::$playerCharacters
仅适用于世界端

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

  • 尝试重命名属性名称,没有变化
  • 角色的水合器条目--->世界看起来与其他人相同
  • 当我半手动(通过 RockMongo)添加条目时,它工作正常
  • 将“世界”字段创建为 NULL 没有区别,{} 它显示“未定义索引:$id”,但我想这是预期的行为
  • 实体分开工作也很好,真的只是这一关系

有什么我遗漏/忽视的地方,或者我能做些什么来发现为什么它没有得到持久化

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

谢谢!

4

1 回答 1

0

好的,问题是 UoW 中有很多条目,其中一些包含 World => null 和一些 World => ...WorldProxy,因此后者可能被覆盖

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

于 2011-08-14T07:58:38.237 回答