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
有没有办法直接这样做?
答案 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
个对象。
作为旁注,我会将您的模型名称更改为单数形式,例如User
,Group
。 $user = new Users()
乍看之下,您一次创建多个用户,我认为您不是: - )
有关详细信息,请参阅Doctrine join table docs。