сущности в разных связках - PullRequest
2 голосов
/ 26 января 2012

Я использую Symfony 2, и у меня есть две сущности в разных пакетах, таких как:

//this class overrides fos_user class
//User\UserBundle\Entity\User
class User extends BaseUser
{
    //..

    /**
        * @ORM\OneToMany(targetEntity="News\AdminBundle\Entity\News", mappedBy="author_id")
        */
        protected $news_author;

    //...
}

//News\AdminBundle\Entity\News
class News
{
    //...

    /**
        * @ORM\ManyToOne(targetEntity="\User\UserBundle\Entity\User", inversedBy="news_author")
        * @ORM\JoinColumn(name="author_id", referencedColumnName="id")
        */
        protected $news_author;

    //...
}

Оба класса (сущности) работают нормально. Я успешно настроил пакет fos_user с регистрацией и другими вещами. То же самое, если для класса новостей. Затем я строю отношения между этими двумя классами OneTo Many (Пользователь -> Новости), как показано в коде. Это также отлично работает без ошибок, и я могу добавить новости, которые принадлежат пользователю. Проблема заключается в том, когда я создаю форму с классом сущности, например:

->add('year', 'entity', array(
    'class' => 'NewsAdminBundle:News',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('u')
                    ->groupBy('u.year')
                        ->orderBy('u.year', 'DESC');
         },))

Эта форма показывает мне годы, когда публикуются новости (например, архив). Годы идут хорошо, но когда я отправляю (публикую) форму, я получаю сообщение об ошибке:

Класс User \ UserBundle \ Entity \ News не существует

выясняю, что эта ошибка связана с предложением

$ форма-> bindRequest ($ запроса);

Проблема в том, что у меня есть две сущности в разных связках. Как я могу решить эту ошибку?

Edit: Я решил проблему. Когда я бегу

php app/console doctrine:generate:entities User
php app/console doctrine:generate:entities News

затем Doctrine генерирует геттеры и сеттеры в User и News. В сущности News генерируется метод

/**
 * Add news_author
 *
 * @param User\UserBundle\Entity\News $newsAuthor
 */
public function addNews(User\UserBundle\Entity\News $newsAuthor)
{
    $this->news_author[] = $newsAuthor;
}

Я не обращал внимания на этот метод, и я изменяю его на этот

/**
 * Add news_author
 *
 * @param News\AdminBundle\Entity\News $newsAuthor
 */
public function addNews(News\AdminBundle\Entity\News $newsAuthor)
{
    $this->news_author[] = $newsAuthor;
}

Теперь все работает нормально. Спасибо за все ответы.

1 Ответ

2 голосов
/ 26 января 2012

   /**
    * @ORM\ManyToOne(targetEntity="User\UserBundle\Entity\User", inversedBy="news_author")
    * @ORM\JoinColumn(name="author_id", referencedColumnName="id")
    */
    protected $news_author;

Вы должны удалить обратную косую черту префикса - см. Примечание в Документация доктрины

...