2012-03-18 55 views
4

Elloo,我有两个主义实体,我试图做左连接,但是我收到一条消息“错误:类GR \ Entity \ AccountEvents没有名为Accounts的关联”。我已经看过其他解决方案在stackoverflow然而没有帮助。Doctrine2实体关联有什么问题

这里是我的代码

<?php 
namespace GR\Entity; 
/** 
* 
* @Table(name="accounts") 
* @Entity 
*/ 
class Accounts 
{ 
    /** 
    * 
    * @var integer $id 
    * @Column(name="id", type="integer",nullable=false) 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @Column(type="string",length=255,nullable=false) 
    * @var string 
    */ 
    private $name; 

    /** 
    * @Column(type="string",length=255,nullable=false) 
    * @var string 
    */ 
    private $email; 

    /** 
    * @Column(type="string",length=255,nullable=false) 
    * @var string 
    */ 
    private $password; 

    /** 
    * @Column(type="datetime",nullable=false) 
    * @var datetime 
    */ 
    private $created_at; 

    /** 
    * @OneToMany(targetEntity="AccountEvents", mappedBy="Accounts") 
    */ 
    private $accountevents; 

    public function __get($property) 
    { 
     return $this->$property; 
    } 

    public function __set($property,$value) 
    { 
     $this->$property = $value; 
    } 
} 

..和

<?php 
namespace GR\Entity; 
/** 
* 
* @Table(name="account_events") 
* @Entity 
*/ 
class AccountEvents 
{ 
    /** 
    * 
    * @var integer $id 
    * @Column(name="id", type="integer",nullable=false) 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 


    /** 
     * @var Accounts $accounts 
     * 
     * @Column(name="account_id", type="integer", nullable=false) 
     * @ManyToOne(targetEntity="Accounts", inversedBy="accountevents") 
     * @JoinColumn(name="accounts_id", referencedColumnName="id") 
     */ 
    private $accounts; 

    /** 
    * @Column(type="string",length=255,nullable=true) 
    * @var string 
    */ 
    private $event; 

    /** 
    * @Column(type="datetime",nullable=false) 
    * @var datetime 
    */ 
    private $created_at; 


    public function __get($property) 
    { 
     return $this->$property; 
    } 

    public function __set($property,$value) 
    { 
     $this->$property = $value; 
    } 
} 

..和我的查询提前

$query = $this->em->createQueryBuilder() 
         ->select('a, e') 
         ->from('GR\Entity\AccountEvents', 'e') 
         ->leftJoin('e.Accounts', 'a') 
         ->query(); 


$results = $query->getResult(); 

感谢

+0

您应该将答案移到答案中。你可以 - 也可能应该 - 甚至接受你自己的答案。 – 2012-03-18 17:02:09

+0

我认为你在混合概念。你不应该在对象上有外键。更重要的是,它看起来像你有多对多,因为事件有“$账户”。但我期望一个事件只有一个帐户。所以“$账户”,而不是“$账户”。为什么你的实体名称被称为“账户”而不是“账户”?为什么你不使用普通的DQL而不是查询生成器?太多的事情要解决... – 2012-03-19 02:13:40

回答

3

我已经解决了它,并在这里是下面的解决方案(我使用ZF 1 0.11,教条2和nolasnowball库)

在帐户实体变化

/** 
* @OneToMany(targetEntity="AccountEvents", mappedBy="accounts") 
* @var \Doctrine\Common\Collections\Collection 
*/ 
private $accountevents; 

在AccountEvents实体变化

/** 
* @ManyToOne(targetEntity="Accounts") 
* @JoinColumn(name="accounts_id", referencedColumnName="id") 
* @var GR\Entity\Accounts 
**/ 
private $accounts; 

要提取的ResultSet

$query = $this->em->createQueryBuilder() 
        ->select('a, e') 
        ->from('GR\Entity\Accounts', 'a') 
        ->leftJoin('a.accountevents', 'e'); 

$results = $query->getQuery()->getResult(); 

这里是完整的代码http://pastie.org/3626654