Как расширяется пользовательская сущность FOSUserBundle? - PullRequest
3 голосов
/ 06 декабря 2011

У меня есть 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У меня есть это:

Неустранимая ошибка PHP: Невозможно повторно объявить MyApp \ UserBundle \ Entity \ UserB :: $ id.

И, чтобы закончить, я не могу удалитьid в моей сущности User меньше возвращает ошибку 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
}

1 Ответ

5 голосов
/ 06 декабря 2011

Похоже, у вас проблема с аннотацией.

Мне удалось воспроизвести ваше сообщение об ошибке «У каждой сущности должен быть идентификатор / первичный ключ», удалив его из моего рабочего кода:

/**
 * @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
    }
}
...