2013-05-22 61 views
2

我使用symfony2和mongoDb ODM。今天我安裝了FosUserBundle。FosUserBundle不會在mongodb數據庫中保留數據

我的User類是這樣的:在創建後

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)的所有初始字段都是一樣的。

+0

做我的回答幫助或你想有那麼映射出的超通過各種手段運行? – nifr

回答

3

看起來inheritance mapping工作不正常。

檢查中config.yml您的學說配置設置爲:

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到資源/配置/ doctrine/User.mongogb.xml

  • 更改它適合你自己的實體類

  • 刪除映射,超節點

  • 添加ID字段作爲標識,支持自動戰略

然後,您可以ommit你的實體@MongoDB註釋完全。

+1

你的答案幫助我!其實,我在我的項目中使用靜態映射。所以我在教條配置中評論了'auto_mapping:true'。這條線分解了所有的作品。 :) – jeremieca

1

節省一些人的時間。

我也遇到了ODM用戶實體的非工作映射問題,無法理解爲什麼它不起作用。究其原因,我必須從擴大FOS\UserBundle\Document\User,而不是我的用戶實體從FOS\UserBundle\Model\User