理论中的MN关系

时间:2010-06-25 15:43:11

标签: php doctrine orm

ZF有一个非常好的功能,称为 findManyToManyRowset ,它直接返回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 

有没有办法直接这样做?

1 个答案:

答案 0 :(得分:2)

Doctrine会在假设您的架构设置正确的情况下自动处理此问题。我只使用Doctrine作为Symfony的一部分,所以我的schema.yml看起来像这样。如果您的Doctrine安装使用不同的方法来定义架构,则可能需要更改它:

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

Doctrine将使用UserHasGroups类作为多对多连接表。然后,调用$user->Groups将为您提供所有关联的Groups个对象。

作为旁注,我会将您的模型名称更改为单数形式,例如UserGroup$user = new Users()乍看之下,您一次创建多个用户,我认为您不是: - )

有关详细信息,请参阅Doctrine join table docs