Question

J'ai mon UserBundle qui étend le FOSUserBundle et fonctionne très bien. Mais maintenant, je veux créer plusieurs entités utilisateurs avec différentes propriétés. Mais le problème est lorsque je crée mon entité utilisateur qui étend mon entité utilisateur principale comme ceci:

class User extends BaseUser
{
    protected $id;
    // The main user class who extends FOSUser entity
}

class UserB extends User
{
    //
}

Lorsque je fais cela, j'ai une erreur: `

Le niveau d'accès à MyApp \ UserBundle \ Entity \ UserB :: $ id doit être protégé (comme dans la classe MyApp \ UserBundle \ Entity \ User).

Et lorsque je crée un identifiant protégé dans mon entité UserB, j'ai ceci:

Erreur fatale PHP: impossible de redéclarer MyApp \ UserBundle \ Entity \ UserB :: $ id.

Et pour finir, je ne peux pas supprimer l'id dans mon entité utilisateur sans retourner une erreur Doctrine:

[Doctrine \ ORM \ Mapping \ MappingException]
Aucun identificateur / clé primaire spécifié pour l'entité 'MTS \ UserBundle \ Entity \ User'. Chaque entité doit avoir un identifiant / une clé primaire.

Quelqu'un peut m'aider?

EDIT: Problème résolu. Mon code:

/**
 * 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
}
Était-ce utile?

La solution

Votre problème semble être le manque d'annotation.

J'ai pu répliquer votre message d'erreur "Chaque entité doit avoir un identifiant / clé primaire" en supprimant ce message de mon code de travail:

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */

Les travaux pour moi:

 /**
 * @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
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top