2013-02-25 21 views
9

私は一般的にSymfony2を初めて使っています。この問題はDoctrineとFOSUserBundleに関係します。Symfony2 - DoctrineとFOSUserBundle - 間違った注釈

私は以下のUser.phpエンティティをFOSUserBundleと自己参照多対多に基づいて作成しました。キャッシュまたはドロップを更新しようとしたときに

<?php 

namespace Pan100\MoodLogBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

    /** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 


/** 
* @ManyToMany(targetEntity="User", mappedBy="hasAccessToMe") 
**/ 
protected $hasAccessTo; 

/** 
* @ManyToMany(targetEntity="User", inversedBy="hasAccessTo") 
* @JoinTable(name="access", 
*  joinColumns={@JoinColumn(name="id", referencedColumnName="id")}, 
*  inverseJoinColumns={@JoinColumn(name="accessor_id", referencedColumnName="id")} 
*  ) 
**/ 
private $hasAccessToMe;  

public function __construct() 
{ 
    parent::__construct(); 
     $this->hasAccessTo = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->hasAccessToMe = new \Doctrine\Common\Collections\ArrayCollection(); 
} 
} 

は私に次のエラーを与える:

[Doctrine\Common\Annotations\AnnotationException]       
[Semantical Error] The annotation "@ManyToMany" in property Pan100\MoodLog 
Bundle\Entity\User::$hasAccessTo was never imported. Did you maybe forget 
to add a "use" statement for this annotation? 

ここで間違っていますか?そして、「使用声明」とは何ですか?

答えて

42

あなたの注釈で@ORM\接頭辞を追加するのを忘れ:

/** 
* @ManyToMany(targetEntity="User", mappedBy="hasAccessToMe") 
**/ 

あなたはまた、個別に注釈をインポートすることができ

/** 
* @ORM\ManyToMany(targetEntity="User", mappedBy="hasAccessToMe") 
**/ 
+1

を成功! ORMとして使用するので、すべての注釈の前にORMを置く必要があります。 – Piddien

3

する必要があります - 私が好む方法:

use Doctrine\ORM\Mapping\Entity; 
use Doctrine\ORM\Mapping\ManyToMany; 
// ... 

/** 
* @Entity 
*/ 
class User 
{ 
    /** 
    * @ManyToMany(targetEntity="Thing") 
    */ 
    private $things; 

    // ... 
} 
関連する問題