2017-05-16 10 views
0

私はthisマッピング戦略を実装しようとしています。私はidや他のフィールドを持つ抽象クラスを定義しました。次のエラーが発生し続ける:抽象クラスに指定された識別子/主キーがありません

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

これは私のクラスです。あなたが見ることができるように、一意の識別子$id

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

'$ id'の可視性を' protected'に設定しようとしましたか? –

+0

Doctrineは、抽象エンティティクラスを扱うためにマップされたスーパークラスの概念を使用しています:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#inheritance-mapping – Cerad

+0

@ JakubMatczakそれは役に立たなかった。私はまだ同じエラーがあります – blahblah

答えて

0

指定されたこの抽象クラスは、データベース内の実際のエンティティであってはなりません。これに代えて

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

を::

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

あなたはカラムIDを指定する必要が

ことは、これをしてくださいしてみてください代わりに@ORM \エンティティの@ORM \ MappedSuperClassを入れて

+0

'Doctrine \ ORM \ Mapping \ MappingException] マッピングされたスーパークラスのエラーで継承情報​​を定義することがサポートされていません – blahblah

+0

本当に継承型とその下のものが必要ですか?私はそれの目的は何だったのかわかりません – Daniella

+0

私はこのマッピング戦略を実装しようとしました:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#クラステーブル継承 – blahblah

0

をお試しください内部コメント

関連する問題