2013-05-22 2 views
2

symfony2와 mongoDb ODM을 사용합니다. 오늘 저는 FosUserBundle을 설치했습니다.FosUserBundle이 mongodb 데이터베이스에 데이터를 유지하지 않습니다.

내 사용자 클래스가 같다 :

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)의 모든 초기 필드와 동일합니다.

+0

에서 FOS\UserBundle\Document\User 및하지에서 내 사용자 개체를 확장해야합니다되었다 않습니다 내 대답은 도움을하거나 모든 수단에 의해 실행되는 매핑 - 슈퍼 클래스를 하시겠습니까? – nifr

답변

3

inheritance mapping이 제대로 작동하지 않는 것 같습니다.

auto_mapping: true 

이 주위에 당신이 FOSUserBundle에서 하나를 확장하여 사용자 개체에 대한 전체 매핑 정보를 추가해야 다른 방식으로 작동 : config.yml에서 교리 구성이 설정되어

확인합니다.

Doctrine \ ORM을 사용하면 일반적으로 확장 클래스에 대한 매핑을 제공하는 @ORM \ MappedSuperClass 주석이 사용됩니다.

... 
<mapped-superclass name="FOS\UserBundle\Document\User" collection="fos_user_user"> 
... 

해결 방법 1 : FOSUserBundle의 MongoDB를 XML을 매핑에서는이 라인

이 시도 :

  • 가로 UserBundle에 걸쳐 mapping xml from FOSUserBundle 복사 자료/설정/doctrine/User.mongogb.xml

  • 변경하기 자신의 엔티티 클래스에 맞게

  • 제거 매핑 - 슈퍼 노드

  • 자동 전략 아이디로 id 필드를 추가

할 수 있습니다 다음 ommit 완전히 엔티티에 @MongoDB 주석.

+1

당신의 대답은 저를 도우십시오! 사실, 내 프로젝트에서 정적 매핑을 사용합니다. 그래서 저는 교리 구성에서'auto_mapping : true'를 주석 처리했습니다. 이 선은 모든 작품을 분해했습니다. :) – jeremieca

1

누군가의 시간을 절약하십시오.

또한 ODM 사용자 엔터티에 대한 작동하지 않는 매핑 문제를 발견했으며 작동하지 않는 이유를 이해할 수 없었습니다. 그 이유는 내가 FOS\UserBundle\Model\User

관련 문제