2011-06-25 58 views
0

在DQL和原則2中我是新的,所以請耐心等待。 我有這個疑問:運行查詢時DQL關聯錯誤

select c, m from A10\CrmBundle\Entity\Crm c inner join c.irszam m on m.irszam = c.cim1irszam where c.kod = ?1

我得到這個錯誤回:

[Semantical Error] line 0, col 64 near 'm on m.irszam': Error: Class A10\CrmBundle\Entity\Crm has no association named irszam

實體:

class Crm 
    { 
     /** 
     * @Id 
     * @OneToOne(targetEntity="megye", mappedBy="kod") 
     * 
     */ 
     protected $kod; 
     ... 
    } 

    class Megye 
    { 

     ... 

     /** 
     * @OneToOne(targetEntity="crm", inversedBy="irszam") 
     * @JoinColumn(name="irszam_id", referencedColumnName="id") 
     * @Column(type="integer") 
     */ 
     protected $irszam; 
     ... 
    } 

感謝您的幫助!

回答

0

嘗試在查詢中用「with」替換「on」。另外,您使用的是identity (@Id) through foreign entities (@OneToOne),因此請確保您使用的是Doctrine 2.1(已經處於Release Candidate狀態),因爲該功能在2.0.x系列中不可用。

另外,我認爲你的關聯映射有錯誤。我覺得你真的想要做的是:

class Crm 
{ 
    /** 
    * @Id 
    * @OneToOne(targetEntity="megye", mappedBy="irszam") 
    * 
    */ 
    protected $kod; 
    ... 
} 

class Megye 
{ 

    ... 

    /** 
    * @OneToOne(targetEntity="crm", inversedBy="kod") 
    * @JoinColumn(name="irszam_id", referencedColumnName="id") 
    * @Column(type="integer") 
    */ 
    protected $irszam; 
    ... 
} 

換句話說,你要切換的mappedBy和inversedBy映射屬性,定義here。這些更改後,您可能必須重新創建數據庫模式。

+0

我使用doctrine 2.1.0RC2版本。我用「with」取代了「on」,但不幸的是沒有解決問題。也許,它是關聯映射問題嗎? – Smith

+0

嗨,我想是的,我更新了我的答案以反映這一點。儘管如此,我還保留我的最初建議(而不是ON),但讓我知道它是如何發展的。 – faken

+0

我按你的建議做了它,但它沒有工作。我真的不明白關聯映射。但在PostgreSQL中,此查詢正在運行。 – Smith