FosUserBundle不会在mongodb数据库中保留数据

时间:2013-05-22 14:04:07

标签: php mongodb symfony fosuserbundle

我使用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)的所有初始字段相同。

2 个答案:

答案 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扩展