OOP php中的1对多关系

时间:2013-03-07 13:40:08

标签: php oop one-to-many

在我花了几个小时重组之前我需要一些指导,并发现这不是一个好办法。我的计划是在学区进行1比1的计划。我有一个包含所有作业,学生和计算机的数据库。我正在构建面向对象的设计,以使编码更加统一(以及所有其他好处)。此应用程序将用于指导用户完成卷取和笔记本电脑检查过程。这是我的困境。

学生(对象)可以有一个或两个当前作业(一个是借用者,另一个是永久物)。我最初构建了一个学生对象,一个赋值对象和一个设备对象。然后,当创建学生时,我们使用查找工厂来查找学生未完成的当前作业。然后我在student构造中循环遍历这些并创建一个赋值对象数组,每个对象都查找设备信息。

这很有效,可以获取我需要的所有信息,但我发现很难处理,因为有一系列赋值对象,并且逻辑上遵循某些规则。

一个借用工具(原始计算机因问题而被发送时给出的一个)必须先转入。而且,通常,很难确定此数组中的哪个赋值对象具有我需要知道的属性。

所以,我的IDEA(这可能不是一个好主意)是将其打破为1对1比1对1的关系。学生分配到设备的分配。

然后,如果我需要知道学生是否有更低的分配,我可以在分配对象中创建一个函数并调用student->assignments->hasLoanerAssignment()

您认为互联网是什么?

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,那么你说借用的作业与永久作业有所不同,这就是造成并发症的原因。如果是这样,那么您可能想要使用继承。然后,Loaner和permananent分配将是两种类型的Assignment,你可以给它们自己的属性和方法。

class Assignment 
{
    // instance of Device
    protected $device

    // instance of Student
    protected $student  
}

class LoanerAssignment extends Assignment 
{
    // various properties and methods relevant to loan
}
class PermanentAssignment extends Assignment 
{
    // various properties and methods relevant to permanent
}

假设您将这些数据保存在数据库中,为Loaner和Permanent创建单独的表,然后可以很容易地向Student添加一个方法,以查看它是否具有更多的借用,例如:

// in Student class
function hasLoanerAssignment()
{
    return 1 === $yourChosenDBAdaptor->getCountOfLoanerAssignents($this->_studentId);
}