1

我有三个类来定义对象UsersMembersProjects

  • 该类定义了详细信息,User例如和 。idemail_addressname
  • Member该类定义了诸如iduser_id和 之类project_id的细节datetime_accepted
  • Project该类定义了诸如id和-之类的细节,title但这并不重要。

该系统具有UsersProjects。AMember是一个User工作在 a 上Project。换句话说,Member类定义了两个对象之间的链接。

我的问题是这样的:

我想获取属于某个项目的成员列表,并且我想从我的结果集中的两个类(MemberUser- 例如User:nameMember: )中收集变量。datetime_accepted

我是否需要定义一个包含两个类的所有变量的新类,或者是否有其他更有效的结构可以用来以面向对象的方式巧妙地处理这个问题?

4

3 回答 3

1

您可以通过以下方式轻松地将 StdObject 转换为数组:

$result = array_merge((array)$user, (array)$member);

那么你将有一个你需要的变量数组。将此添加到 Project 类中的新函数中,或考虑使用 Member 作为 User 类的子级。

于 2012-04-11T17:06:20.050 回答
0

我最终解决这个问题的方法ProjectUserMember. 对象是在构造成员时创建的。工作正常。

于 2012-04-12T19:22:08.787 回答
0

使用 Active Record 模型时,您通常会在一个对象中使用一个方法来获取相关对象。如果您想将 SQL 简化为一个查询,那么您将远离 Active Record 模型。这很好,它只是改变了你解决问题的方式。

我过去所做的是两种方法之一:

  1. 例如,要将“虚拟属性”添加到 AR,我的登录(用户)类有一个属性“角色”,该属性由 JOIN 在其标准加载查询中填充。

  2. 创建一个我为更复杂的情况扩展的报告对象。Report 子类有一个属性,即多表查询,以及表示 WHERE 子句参数的其他属性。该类生成一个数组数组。

于 2012-04-11T18:33:51.343 回答