3

我有我的 UserBundle,它扩展了 FOSUserBundle 并且工作正常。但是现在,我想创建具有不同属性的多个用户实体。但问题是当我创建像这样扩展我的主要用户实体的用户实体时:

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 少返回一个 Doctrine 错误:

[Doctrine\ORM\Mapping\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
}
4

1 回答 1

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
    }
}
于 2011-12-06T11:39:21.340 回答