面向对象php中的1对多关系
我需要一点指导,然后再花几个小时进行重组,发现这不是一个好办法。我的计划是在一个学区进行一对一的计划。我有一个所有作业、学生和电脑的数据库。我正在构建一个面向对象的设计,以使编码更加统一(以及所有其他好处)。此应用程序将用于指导用户完成收线和笔记本电脑检查过程。这是我的困境 学生(对象)可以有一个或两个当前作业(一个是借贷者,另一个是永久性的)。我最初构建了一个学生对象、一个作业对象和一个设备对象。然后,当学生被创建时,我们使用查找工厂来查找学生当前未完成的作业。然后,我在student构造中循环这些对象,并创建一个分配对象数组,每个分配对象查找设备信息 这非常有效,可以获得我需要的所有信息,但我发现很难使用,因为有一系列赋值对象,并且逻辑上要遵循某些规则 必须首先提交借贷者作业(当原始计算机因问题被送出时给出的作业)。一般来说,很难确定这个数组中哪个赋值对象有我需要知道的属性 所以,我的想法(这可能不是一个好主意)是打破这一点,以1对1对1的关系。学生作业到设备作业 然后,如果我需要知道学生是否有借贷者作业,我可以在作业对象中创建一个函数,并调用面向对象php中的1对多关系,php,oop,one-to-many,Php,Oop,One To Many,我需要一点指导,然后再花几个小时进行重组,发现这不是一个好办法。我的计划是在一个学区进行一对一的计划。我有一个所有作业、学生和电脑的数据库。我正在构建一个面向对象的设计,以使编码更加统一(以及所有其他好处)。此应用程序将用于指导用户完成收线和笔记本电脑检查过程。这是我的困境 学生(对象)可以有一个或两个当前作业(一个是借贷者,另一个是永久性的)。我最初构建了一个学生对象、一个作业对象和一个设备对象。然后,当学生被创建时,我们使用查找工厂来查找学生当前未完成的作业。然后,我在student构造中循
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。谢谢