2011-04-24 67 views
1

我有兩個表/實體clientsite,它們具有由連接表client_site組合的多對多關係。以下是我的實體如何設置。Doctrine2:爲什麼映射沒有檢測到我的複合鍵

下面是客戶端表實體

/** 
* @Entity 
* @Table(name="client") 
*/ 
class Client 
{ 
    /** 
    * @Id @Column(type="bigint") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ManyToMany(targetEntity="Site", inversedBy="clients") 
    * @JoinTable(name="client_site", 
    *  joinColumns={@JoinColumn(name="c_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@JoinColumn(name="s_id", referencedColumnName="id")} 
    *  ) 
    */ 
    private $sites; 

和站點表實體

/** 
* @Entity 
* @Table(name="site") 
*/ 
class Site 
{ 
    /** 
    * @Id @Column(type="bigint") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ManyToMany(targetEntity="Client", mappedBy="sites") 
    */ 
    private $clients; 

這是client_site表實體

/** 
* @Entity 
* @Table(name="client_site",indexes={@index(name="FK_client_site",columns={"c_id"}),@index(name="FK_client_site_2",columns={"s_id"})}) 
*/ 
class ClientSite 
{ 
    /** 
    * @Id 
    * @ManyToOne(targetEntity="Client", inversedBy="ClientSite") 
    */ 
    private $client; 

    /** 
    * @Id 
    * @ManyToOne(targetEntity="Site", inversedBy="ClientSite") 
    */ 
    private $site; 

這是我試圖運行

$query = Zend_Registry::get('em') 
        ->createQuery('SELECT c, s 
        FROM Application\Models\Client c 
        JOIN c.sites s 
        WHERE c.is_active = 1');    
$clients = $query->getResult(); 

查詢,這是我的錯誤

No identifier/primary key specified for Entity 'Application\Models\ClientSite'. Every Entity must have an identifier/primary key. 

我把@Id在這兩個領域在ClientSite實體,因爲它們是我的連接器表的複合主鍵。這不能在Doctrine2中完成嗎?如果它不能,我有什麼替代選擇。

如果你能做到這一點,我做了什麼不正確?

回答

1

這目前不支持原則2.

然而,他們在實驗分支working on adding support for this。顯然這可能包含在2.1版本中,如果它沒有問題的話。

+0

你知道現在這個問題嗎? – user1121883 2013-02-17 16:23:38

+0

@ user1121883我最近沒有跟進開發,你應該可以很容易地測試它是否可以自己工作。 – 2013-02-17 22:05:43