我正在使用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”,但我想这是预期的行为
- 实体分开工作也很好,真的只是这一关系
有什么我遗漏/忽视的地方,或者我能做些什么来发现为什么它没有得到持久化
(如果需要更多信息,将编辑帖子)
谢谢!