2011-07-01 128 views
12

我无法弄清楚如何我可以有2捆绑之间的实体关系。Symfony2 - Doctrine - 2捆绑之间的实体关系

最近我一直到目前为止的成功是这样的:

用户实体

<?php 
namespace Acme\AuthBundle\Entity; 
use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

use Symfony\Component\Validator\Constraints as Assert; 

use Doctrine\Common\Collections\ArrayCollection; 

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

    //... 

    /** 
    * @ORM\OneToMany(targetEntity="Acme\NewsBundle\Entity\Article", mappedBy="author") 
    */ 
    protected $articles; 


    //... 

文章实体

<?php 
namespace Acme\NewsBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity(repositoryClass="Acme\NewsBundle\Entity\ArticleRepository") 
* @ORM\Table(name="articles") 
*/ 
class Article 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    //... 

    /** 
    * @ORM\ManyToOne(targetEntity="Acme\AuthBundle\Entity\User", inversedBy="articles") 
    */ 
    protected $author; 

    //... 

在生成实体和更新数据库,我没有得到任何错误,并在数据库中正确设置关系。

但当我尝试获取的文章中,我得到这样的:

Class Acme\AuthBundle\Entity\Article does not exist 
500 Internal Server Error - ReflectionException 

注意,用户实体处于AuthBundle条和第实体NewsBundle。

谢谢。

回答

8

在定义一对多,多对一的关系时,您需要指定实体类的名称。仍然指定Acme\AuthBundle\Entity\User而不是Aief\AuthBundle\Entity\User作为targetEntity

文章和文章库相同。

+0

对不起,错字错误,我实际上已将Aief更改为Acme只是为了发帖(我会编辑它)。所以不是这样。 – LBridge

+0

问题在于它在AuthBundle中查找文章实体时,它应该在NewsBundle中查找。我不明白为什么。 – LBridge

+0

目前您是否对Doctrine使用任何缓存?尝试清洁它。删除生成的代理类也可以包含错误的类名称。 – Gedrox