我有三个类来定义对象:Users
,Members
和Projects
。
User
类定义了id
,email_address
等详细信息
name
。Member
类定义了id
,user_id
等详细信息,
project_id
和datetime_accepted
。Project
类定义了id
和title
等详细信息
虽然不重要。系统有Users
和Projects
。 Member
User
是Project
的{{1}}。换句话说,Member
类定义了两个对象之间的链接。
我的问题是:
我想获得属于某个项目的成员列表,我想从两个类(Member
和User
- 中收集变量 - 例如User
:{{1我的结果集中有{}和name
:Member
}。
我是否需要定义一个包含两个类中所有变量的新类,或者是否有一些其他更高效的结构可以用来整齐地以面向对象的方式处理它?</ p>
答案 0 :(得分:1)
您可以通过以下方式轻松地将StdObject强制转换为数组:
$result = array_merge((array)$user, (array)$member);
然后你将拥有一个你需要的变量数组。将它添加到Project类中的新函数, 或者考虑使用会员作为用户类的孩子。
答案 1 :(得分:0)
使用Active Record Models时,通常在一个对象中有一个方法来获取相关对象。如果您想将SQL简化为一个查询,那么您将远离活动记录模型。这很好,只会改变你解决问题的方式。
我过去所做的是两种方法之一:
例如,要向“AR”添加“虚拟属性”,我的“登录(用户)”类具有属性“角色”,该属性在其标准加载查询中由JOIN填充。
创建一个Report对象,我将其扩展到更复杂的情况。 Report子类具有一个属性,即多表查询,以及表示WHERE子句参数的其他属性。该类生成一个数组数组。
答案 2 :(得分:0)
我最终要解决此问题的方法是在Project
内创建User
和Member
对象。构造成员时创建了对象。工作还可以。