2012-03-18 137 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