【问题标题】:1 to Many relationship in OOP phpOOP php中的一对多关系
【发布时间】:2013-03-07 23:33:07
【问题描述】:

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

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

这很好用,可以获取我需要的所有信息,但我发现很难使用,因为有一组赋值对象,并且在逻辑上需要遵循某些规则。

必须首先提交借用任务(原始计算机因问题被送走时给予的任务)。而且,一般来说,很难确定这个数组中的哪个赋值对象具有我需要知道的属性。

所以,我的想法(这可能不是一个好主意)是将其分解为一对一的关系。学生到作业到作业到设备。

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

你觉得互联网怎么样?

【问题讨论】:

    标签: php oop one-to-many


    【解决方案1】:

    如果我理解正确,您是说借用任务与永久任务不同,这会导致复杂化。如果是这样,那么您可能想要使用继承。贷款和永久分配将是两种类型的分配,您可以给它们自己的属性和方法。

    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);
    }
    

    【讨论】:

    • 感谢您的回复。如果不破坏已经在生产中的其他程序,我无法更改数据库架构。 assignments 表包含所有分配,并有一个名为“loaner”的字段,它是布尔值(小整数),表示借用分配或永久分配。
    • 这并不重要。您仍然可以在 PHP 级别使用继承。
    • 是的,这是真的。我认为这是一个可以接受的解决方案。然后我会在学生对象中存储诸如 hasLoanerAssignment 和 hasPermanentAssignment 之类的布尔函数,它会检查 $loaner 和 $permanent 是否为空。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多