我正在使用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;
}
现在一切正常。谢谢你的所有答案。
答案 0 :(得分:2)
/**
* @ORM\ManyToOne(targetEntity="User\UserBundle\Entity\User", inversedBy="news_author")
* @ORM\JoinColumn(name="author_id", referencedColumnName="id")
*/
protected $news_author;
您必须删除前缀反斜杠 - 请参阅Doctrine documentation
中的注释