我有我的UserBundle扩展FOSUserBundle和工作良好。但是现在,我想创建具有不同属性的多个用户实体。但问题是,当我创建user实体时它扩展了主user实体,像这样:
class User extends BaseUser
{
protected $id;
// The main user class who extends FOSUser entity
}
class UserB extends User
{
//
}
当我这样做时,我得到了一个错误:'
MyApp'UserBundle'Entity'UserB::$id的访问级别必须被保护(就像在MyApp'UserBundle'Entity'User类中一样)。
当我在UserB实体中创建受保护id时,我有这个:
PHP致命错误:无法重新声明MyApp'UserBundle'Entity'UserB::$id.
最后,我不能删除id在我的用户实体少返回一个学说错误:
[学说' ORM映射' ' MappingException]
没有为实体"MTS'UserBundle'Entity'User"指定标识符/主键。每个实体都必须有一个标识符/主键。
有人能帮我吗?
编辑:问题解决。我的代码:
/**
* 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
}
您的问题似乎是缺少注释。
我能够复制你的"每个实体必须有一个标识符/主键"错误信息从我的工作代码中删除:
/**
* @ORM'Id
* @ORM'Column(type="integer")
* @ORM'GeneratedValue(strategy="AUTO")
*/
The works for me:
/**
* @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
}
}