Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象php中的1对多关系_Php_Oop_One To Many - Fatal编程技术网

面向对象php中的1对多关系

面向对象php中的1对多关系,php,oop,one-to-many,Php,Oop,One To Many,我需要一点指导,然后再花几个小时进行重组,发现这不是一个好办法。我的计划是在一个学区进行一对一的计划。我有一个所有作业、学生和电脑的数据库。我正在构建一个面向对象的设计,以使编码更加统一(以及所有其他好处)。此应用程序将用于指导用户完成收线和笔记本电脑检查过程。这是我的困境 学生(对象)可以有一个或两个当前作业(一个是借贷者,另一个是永久性的)。我最初构建了一个学生对象、一个作业对象和一个设备对象。然后,当学生被创建时,我们使用查找工厂来查找学生当前未完成的作业。然后,我在student构造中循

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

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

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

必须首先提交借贷者作业(当原始计算机因问题被送出时给出的作业)。一般来说,很难确定这个数组中哪个赋值对象有我需要知道的属性

所以,我的想法(这可能不是一个好主意)是打破这一点,以1对1对1的关系。学生作业到设备作业

然后,如果我需要知道学生是否有借贷者作业,我可以在作业对象中创建一个函数,并调用
student->assignments->hasloaneralassignment()


你觉得互联网怎么样?

如果我没弄错的话,你是说借贷者的作业不同于永久性作业,这导致了复杂性。如果是这样,那么您可能希望使用继承。借贷者分配和永久分配将是两种类型的分配,你可以给他们自己的属性和方法

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
}
假设您将这些数据保存在一个数据库中,为借贷者和永久借贷者创建单独的表,然后很容易向学生添加一个方法,以查看是否有借贷者作业,例如:

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

如果我没弄错的话,你是说借贷者转让不同于永久转让,这导致了复杂性。如果是这样,那么您可能希望使用继承。借贷者分配和永久分配将是两种类型的分配,你可以给他们自己的属性和方法

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
}
假设您将这些数据保存在一个数据库中,为借贷者和永久借贷者创建单独的表,然后很容易向学生添加一个方法,以查看是否有借贷者作业,例如:

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

谢谢你的回复。我无法在不中断已在生产中的其他程序的情况下更改数据库模式。assignments表包含所有分配,并有一个名为“loaner”的字段,该字段是布尔值(极小的int),表示借贷者分配或永久分配。这并不重要。您仍然可以在PHP级别使用继承。我认为这是一个可以接受的解决办法。然后,我将像hasloaneralassignment和hasPermanentAssignment这样的布尔函数存储在student对象中,它将检查$loanar和$permanent是否为null。谢谢你的回复。我无法在不中断已在生产中的其他程序的情况下更改数据库模式。assignments表包含所有分配,并有一个名为“loaner”的字段,该字段是布尔值(极小的int),表示借贷者分配或永久分配。这并不重要。您仍然可以在PHP级别使用继承。我认为这是一个可以接受的解决办法。然后,我将像hasloaneralassignment和hasPermanentAssignment这样的布尔函数存储在student对象中,它将检查$loanar和$permanent是否为null。谢谢