我正在使用 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
仅适用于世界方面
看着它好多天,找不到任何不同的东西。
是否有任何我遗漏/被忽视的事情,或者我该怎么做以发现为什么它没有被持久化
(如果需要更多信息,将编辑帖子)
谢谢!
答案 0 :(得分:0)
好的,事情是UoW中有很多条目包含World => null和一些World => ...... WorldProxy,后者可能被覆盖了
在分配之前使用flush()解决了这个问题