MappingException при попытке расширения из BaseUser в FOSUserBundle

Я определяю Usuario сущность, которая выходит из FOSUserBundle BaseUser и я делаю это следующим образом:

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». Каждый субъект должен иметь
идентификатор / первичный ключ.

Зачем? Не имеет ФОС User сущность а id поле определяется как PK?

Странная проблема при попытке добавить поле с помощью черт

Так как я буду иметь ID во многих таблицах, для дублирования кода и следования передовой практике, я решил использовать для него черту. Вот как это выглядит:

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 юридическое лицо:

use ComunBundle\Model\IdentifierAutogeneratedEntityTrait;

И попробуйте использовать в классе сущности:

class Usuario extends BaseUser {
use IdentifierAutogeneratedEntityTrait;

...

}

Получил ту же ошибку, почему не признает черту?

ОБНОВИТЬ

Я управлял командой doctrine:schema:validate из оболочки Symfony2 и я получаю этот вывод:

[Symfony \ Component \ Debug \ Exception \ ContextErrorException] Время выполнения
Примечание: FOS \ UserBundle \ Model \ User and ComunBundle \ Model \ Id
entifierAutogeneratedEntityTrait определяет то же свойство ($ id) в
состав UsuarioBundle \ Entity \ Usuario. Это может быть
несовместимо, чтобы улучшить удобство обслуживания рассмотрите использование аксессора
методы в чертах характера. Класс был составлен в
/ Вар / WWW / HTML / sencamer / SRC / UsuarioBund
le / Entity / Usuario.php line 500

Нужно ли мне определить $id в сущности и не можете использовать черту?

0

Решение

Модель FOS User имеет свойство 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" />

Как видите, он не предоставляет информацию для отображения поля id. Вы должны добавить это к своей сущности.

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

Другие решения

FOS\UserBundle\Model\User является «независимым от хранилища пользовательским объектом». Override id в вашей сущности с более подробным определением:

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

По вопросам рекламы [email protected]