我使用symfony2和mongoDb ODM。今天我安装了FosUserBundle。
我的用户类就是这样:
use FOS\UserBundle\Document\User as BaseUser;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document
*/
class User extends BaseUser
{
/**
* @MongoDB\Id(strategy="auto")
*/
protected $id;
public function __construct()
{
parent::__construct();
}
}
我的问题是在创建了一个带有FosUserBundle创建命令的用户之后,只有用户的id保存在mongodb文件中。
如果我在User类中添加以下内容:
/**
* @MongoDB\String
*/
protected $username;
create命令持久化Id和良好的用户名。 当然,它与FOS \ UserBundle \ Document \ User(BaseUser)的所有初始字段相同。
答案 0 :(得分:3)
看起来inheritance mapping无效。
检查config.yml中的Doctrine配置是否设置为:
auto_mapping: true
要解决另一种方法,您需要将完整的映射信息添加到用户实体,从而扩展FOSUserBundle中的映射信息。
使用Doctrine \ ORM,它通常是@ORM \ MappedSuperClass注释,它提供扩展类的映射。在FOSUserBundle的mongodb xml映射中,就是这一行:
...
<mapped-superclass name="FOS\UserBundle\Document\User" collection="fos_user_user">
...
解决方案1:
试试这个:
将mapping xml from FOSUserBundle复制到您的UserBundle到Resources / config / doctrine / User.mongogb.xml
将其更改为适合您自己的实体类
删除映射超类节点
将id字段添加为带有自动策略的ID
然后,您可以完全省略实体上的@MongoDB注释。
答案 1 :(得分:1)
节省一些人的时间。
我还遇到了ODM用户实体的非工作映射问题,并且无法理解为什么它不起作用。原因是我必须从 FOS\UserBundle\Document\User
扩展我的用户实体,而不是从 FOS\UserBundle\Model\User
扩展