2011-12-06 57 views
3

我有我的UserBundle谁扩展FOSUserBundle和正常工作。但是现在,我想创建具有différents属性的多个用户实体。 但问题是,当我创建谁伸出我的主要用户的实体像这样我的用户enttity:如何扩展FOSUserBundle的用户实体?

class User extends BaseUser 
{ 
    protected $id; 
    // The main user class who extends FOSUser entity 
} 

class UserB extends User 
{ 
    // 
} 

当我这样做,我得到了一个错误:`

Access level to MyApp\UserBundle\Entity\UserB::$id must be protected (as in class MyApp\UserBundle\Entity\User).

当我在我的用户B实体创建一个受保护的id我有这样的:

PHP Fatal error: Cannot redeclare MyApp\UserBundle\Entity\UserB::$id.

而结束,我不能删除ID在我的用户实体少返回一个错误学说:

[Doctrine\ORM\Mapping\MappingException]
No identifier/primary key specified for Entity 'MTS\UserBundle\Entity\User'. Every Entity must have an identifier/primary key.

有人可以帮助我吗?

编辑:问题解决了。我的代码:

/** 
* MTS\UserBundle\Entity\User 
* 
* @ORM\Entity 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
* @ORM\DiscriminatorMap({"userfb" = "UserFB"}) 
*/ 
abstract class User extends BaseUser 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string $type 
    */ 
    private $type; 
} 

/** 
* @ORM\Table() 
* @ORM\Entity() 
*/ 
class UserB extends User 
{ 
    // My variables 
} 

回答

5

您的问题似乎是缺少注释。

我可以复制你的“每一个实体必须有一个标识符/主键”错误信息从我的工作代码删除此:

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 

的作品对我来说:

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
    } 
} 
+0

感谢名单为你的答案。最后,我的问题是由于不良继承。 看看我的代码的编辑。 – Naelyth