2010-06-25 80 views
1

ZF有一個非常好的功能,叫做findManyToManyRowset它直接從MN連接返回對象的集合。 MN的全部目的是從另一個表中獲取信息,而不是從連接表中獲取信息。MN在學說中的關係

我們有這個模式:

- users 
    - id 
    - name 

- groups 
    - id 
    - name 

- user_has_groups 
    - user_id 
    - group_id 

我想創建一個用戶的功能,這將直接返回組對象的集合,而不是user_has_groups對象的集合。

$user->UserHasGroups ;// returns a collection of user_has_groups 
$user->Groups; // returns Doctrine_Record_UnknownPropertyException 

有沒有辦法直接做到這一點?

回答

2

原則假定您的模式設置正確,自動處理此操作。我只使用Doctrine作爲Symfony的一部分,所以我的schema.yml看起來像這樣。您可能需要改變它,如果你的學說安裝使用不同的方法來定義您的模式:

Users: 
    columns: 
    name: 
     type: string 
    relations: 
    Groups: 
     refClass: UserHasGroups 
     local: user_id 
     foreign: group_id 

Groups: 
    columns: 
    name: 
     type: string 
    relations: 
    Users: 
     refClass: UserHasGroups 
     local: group_id 
     foreign: id 

UserHasGroups 
    columns: 
    user_id: 
     type: integer 
     primary: true 
    group_id: 
     type: integer 
     primary: true 

學說將使用UserHasGroups類的許多一對多連接表。然後,撥打$user->Groups會讓你全部關聯Groups對象。請注意,我會將您的型號名稱更改爲單數形式,例如User,Group$user = new Users()乍一看,你一次創建多個用戶,我認爲你不是:-)

查看Doctrine join table docs瞭解更多詳情。

+0

謝謝。我想我從現有表的自動生成的Yaml沒有創建一個refClass屬性,但只有像(UserHasGroups:local:id foreign:user_id type:many)這樣的中間表關係。現在至少我知道該找什麼。謝謝 – 2010-06-25 18:44:47