我是一名网站 build 者,我有一些表格,是否可以始终基于该表格构建一个类并为其创建一个对象?我有一个 teacher 表(ID、USERNAME)和一个基于它的类有 giveMark()
、editMark()
等。另一个是student (ID,NAME) 表,包含 getMarks()
、getMissingHours()
等。现在因为学生和学生之间存在 N:M 关系老师们,我有一个link_teacher_student (ID,TEACHED_ID,STUDENT_ID) 表,它是一个“助手”表。我是否也应该为它创建类/对象?
不,您不应该有link_teacher_student
表的对象。 This is common thing to do in a RDBMS structure, but not in an OOP model. OOP 模型中的相同关系很简单:
class Teacher {
protected $students = array();
}
class Student {
protected $teachers = array();
}
然后您将使用 DataMapper在获取 Teacher
或 Student
时初始化该数组,例如你的DAO会查询老师和join the students然后 Mapper 会 create Student objects并将它们填充到教师的数组中。
不过,您可以做的是将 $students
或 $teachers
设为 Repositories并给他们 finder 方法来查询查找表,例如
class Teacher
…
public function __construct($studentsRepository)
{
$this->students = $studentRepository;
}
public function getStudents()
{
return $this->students->findByTeacherId($this->id);
}
}
class StudentRepository
…
public function findByTeacherId($teacherId)
{
foreach ($this->dao->select('SELECT …', $teacherId) as $student) {
$students[] = $this->studentBuilder->build($student);
}
return $students;
}
}