2017-05-16 1 views
0

J'essaie d'implémenter la stratégie de mappage this. J'ai défini la classe abstraite avec id et d'autres champs. mais je continue d'obtenir l'erreur suivante:Aucun identificateur/clé primaire spécifié pour la classe abstraite

No identifier/primary key specified for Entity "AppBundle\Entity\AbstractItem". Every Entity must have an identifier/primary key. (500 Internal Server Error)

Ceci est ma classe. Comme vous pouvez le voir, l'identificateur unique $id a été spécifié

use Doctrine\ORM\Mapping as ORM; 

/** 
    * @ORM\Entity 
    * @ORM\InheritanceType("JOINED") 
    * @ORM\DiscriminatorColumn(name="type", type="string") 
    * @ORM\DiscriminatorMap({"post" = "Post", "group" = "Group"}) 
    */ 
class AbstractItem 
{ 
    /** 
     * @var int 
     * 
     * @ORM\Id 
     * @ORM\GeneratedValue(strategy="IDENTITY") 
     */ 
    private $id; 

    /** 
     * @var \DateTime 
    */ 
    protected $published; 
    protected $object; 
    protected $target; 

    /** 
     * @return mixed 
     */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 
+1

Avez-vous essayé de définir la visibilité de '$ id' sur' protected'? –

+0

Doctrine utilise la notion de super classes mappées pour traiter les classes d'entités abstraites: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#inheritance-mapping – Cerad

+0

@JakubMatczak ça n'a pas aidé. J'ai toujours la même erreur – blahblah

Répondre

0

Cette classe abstraite ne doit pas être une entité réelle dans la base de données.

Essayez de mettre @ORM \ MappedSuperClass au lieu de @ORM \ Entité

+0

maintenant je reçois '[Doctrine \ ORM \ Mapping \ MappingException] Il n'est pas pris en charge pour définir les informations d'héritage sur une erreur de superclasse mappée – blahblah

+0

Vous avez vraiment besoin de InheritanceType et les choses en dessous? Je ne comprends pas quel était le but de cela – Daniella

+0

J'ai essayé de mettre en œuvre cette stratégie de cartographie: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html# class-table-inheritance – blahblah

0

essayer cette s'il vous plaît:

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

Au lieu de cela:

/** 
    * @var int 
    * 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
private $id; 

Vous devez spécifier l'ID de colonne inside comment