Я новичок в Symfony2 в целом. Однако эта проблема связана с Doctrine и FOSUserBundle.
У меня есть следующая Entity 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?
Что здесь не так? И что такое «использование заявления»?
Вы забыли добавить префикс @ORM\
в свои аннотации:
/** * @ManyToMany(targetEntity="User", mappedBy="hasAccessToMe") **/
должно быть
/** * @ORM\ManyToMany(targetEntity="User", mappedBy="hasAccessToMe") **/
Вы также можете импортировать каждую аннотацию индивидуально – так, как я предпочитаю:
use Doctrine\ORM\Mapping\Entity; use Doctrine\ORM\Mapping\ManyToMany; // ... /** * @Entity */ class User { /** * @ManyToMany(targetEntity="Thing") */ private $things; // ... }