Php 尝试从FOSUserBundle中的BaseUser扩展时发生映射异常

Php 尝试从FOSUserBundle中的BaseUser扩展时发生映射异常,php,symfony,inheritance,fosuserbundle,Php,Symfony,Inheritance,Fosuserbundle,我正在定义一个从FOSUserBundleBaseUser扩展而来的Usuario实体,我将按照以下步骤执行: namespace UsuarioBundle\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; use Gedmo\Timestampable\Traits\TimestampableEn

我正在定义一个从FOSUserBundle
BaseUser
扩展而来的
Usuario
实体,我将按照以下步骤执行:

namespace UsuarioBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\Common\Collections\ArrayCollection;
use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber;

/**
 * @ORM\Entity
 * @ORM\Table(name="usuarios_externos.usuarios", schema="usuarios_externos")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({
 *     "natural" = "Natural",
 *     "empresa" = "Empresa"
 * })
 * @UniqueEntity(fields={"correo_alternativo"}, message="El correo electrónico ya está siendo usado, por favor introduzca otro.")
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
 */
class Usuario extends BaseUser {
    /**
     * Hook timestampable behavior
     * updates createdAt, updatedAt fields
     */
    use TimestampableEntity;

    ...

    public function getId()
    {
        return $this->id;
    }

    ....
}
但我得到了一个错误:

MappingException:未为实体指定标识符/主键 “UsuarioBundle\Entity\Usuario”的子类 “FOS\UserBundle\Model\User”。每个实体都必须有一个 标识符/主键

为什么??FOS
用户
实体没有定义为PK的字段吗

尝试使用Traits添加字段时出现奇怪问题

由于我将在许多表中使用
ID
字段,对于重复代码消除和遵循良好实践,我决定对其使用Trait。这就是它的样子:

namespace ComunBundle\Model;

use Doctrine\ORM\Mapping as ORM;

trait IdentifierAutogeneratedEntityTrait {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer", nullable=false, unique=true)
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     */
    protected $id;

    public function getId()
    {
        return $this->id;
    }

}
现在我在
Usuario
实体中包含了trait:

use ComunBundle\Model\IdentifierAutogeneratedEntityTrait;
并尝试在实体类中使用:

class Usuario extends BaseUser {
    use IdentifierAutogeneratedEntityTrait;

    ...

}
有同样的错误,为什么不承认这个特征呢

更新

我从symfony2shell运行命令
doctrine:schema:validate
,得到以下输出:

[Symfony\Component\Debug\Exception\ContextErrorException]运行时 注意:FOS\UserBundle\Model\User和ComunBundle\Model\Id
EntifierAutoGeneratedTityTrait在中定义相同的属性($id) UsuarioBundle\Entity\Usuario的复合。这可能是 不兼容,为了提高可维护性考虑使用访问器 方法在tead中。全班学生都是用英语写的 /var/www/html/sencamer/src/UsuarioBund
le/Entity/Usuario.php第500行


我是否需要在实体中定义
$id
,并且不能使用特征?

FOS\UserBundle\Model\User
是一个“存储不可知的用户对象”。使用更详细的定义覆盖实体中的
id

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected  $id;

FOS\UserBundle\Model\User
是一个“与存储无关的用户对象”。使用更详细的定义覆盖实体中的
id

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected  $id;

FOS用户模型具有id属性,但不提供到该属性的
id
映射。您必须重写
id
属性并提供所需的注释

//excerpt from the FOSUserbundle doctrine mapping config
<mapped-superclass name="FOS\UserBundle\Model\User">

    <field name="username" column="username" type="string" length="255" />

    <field name="usernameCanonical" column="username_canonical" type="string" length="255" unique="true" />

FOS用户模型具有id属性,但不提供到该属性的
id
映射。您必须重写
id
属性并提供所需的注释

//excerpt from the FOSUserbundle doctrine mapping config
<mapped-superclass name="FOS\UserBundle\Model\User">

    <field name="username" column="username" type="string" length="255" />

    <field name="usernameCanonical" column="username_canonical" type="string" length="255" unique="true" />