Php 尝试从FOSUserBundle中的BaseUser扩展时发生映射异常
我正在定义一个从FOSUserBundlePhp 尝试从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
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\IdEntifierAutoGeneratedTityTrait在中定义相同的属性($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" />