gpt4 book ai didi

php - FosUserBundle 不在 mongodb 数据库中持久化数据

转载 作者:可可西里 更新时间:2023-11-01 10:01:15 26 4
gpt4 key购买 nike

我使用 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;

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

最佳答案

它看起来像 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">
...

解决方案一:

试试这个:

  • 复制 mapping xml from FOSUserBundle将你的 UserBundle 放到 Resources/config/doctrine/User.mongogb.xml

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

  • 删除映射父类(super class)节点

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

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

关于php - FosUserBundle 不在 mongodb 数据库中持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16693881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com