【问题标题】:FosUserBundle don't persist data in mongodb databaseFosUserBundle 不在 mongodb 数据库中保存数据
【发布时间】:2013-05-17 15:06:41
【问题描述】:

我使用 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 文档中。

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

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

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

【问题讨论】:

  • 我的回答是否有帮助,或者您想让映射的超类无论如何运行?

标签: php mongodb symfony fosuserbundle


【解决方案1】:

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 注释。

【讨论】:

  • 你的回答对我有帮助!实际上,我在我的项目中使用静态映射。所以我在教义配置中评论了auto_mapping: true。这条线decommented,一切正常。 :)
【解决方案2】:

为了节省别人的时间。

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

扩展我的用户实体

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2021-06-11
    • 2023-03-23
    • 2019-09-29
    • 2011-09-17
    相关资源
    最近更新 更多