不同包中的实体

时间:2012-01-25 20:43:50

标签: symfony entities

我正在使用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(User - > News)之间建立关系。这也可以正常工作而没有错误,我可以添加属于用户的新闻。问题是当我使用实体类构建表单时:

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

此表格显示我发布新闻的年份(如存档)。年份显示正常,但当我提交(发布)表格时,我有错误:

  

Class User \ UserBundle \ Entity \ News不存在

我发现这个错误与句子

有关
  

$形式 - > bindRequest($请求);

问题是因为我在不同的包中有两个实体。我该如何解决这个错误?

修改 我解决了这个问题。我跑的时候

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

然后Doctrine在用户和新闻中生成getter和setter。在实体新闻中,它生成方法

/**
 * 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 个答案:

答案 0 :(得分:2)

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

您必须删除前缀反斜杠 - 请参阅Doctrine documentation

中的注释