2

我使用 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 create 命令创建了一个用户后,只有用户的 id 保留在 mongodb 文档中。

如果我在我的用户类中添加以下内容:

    /**
     * @MongoDB\String
     */
    protected $username;

create 命令持久化 Id 和良好的用户名。当然,FOS\UserBundle\Document\User(BaseUser)的所有初始字段都是一样的。

4

2 回答 2

3

看起来继承映射无法正常工作。

检查 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:

尝试这个:

  • 将映射 xml 从 FOSUserBundle复制到您的 UserBundle 到 Resources/config/doctrine/User.mongogb.xml

  • 更改它以适合您自己的实体类

  • 删除映射超类节点

  • 使用自动策略将 id 字段添加为 Id

然后,您可以完全省略实体上的 @MongoDB 注释。

于 2013-05-22T14:32:46.563 回答
1

为了节省别人的时间。

我还遇到了 ODM 用户实体的非工作映射问题,无法理解为什么它不起作用。原因是我必须FOS\UserBundle\Document\User从而不是从FOS\UserBundle\Model\User

于 2013-09-15T23:12:22.010 回答