2011-08-01 108 views
3

我是一個網站建設者,我有一些表,可以總是建立一個類,並根據該表創建它的一個對象嗎?我有一個老師表(ID,用戶名)和基於它的一類了giveMark()editMark()等。另一個是學生(ID,姓名)表,與getMarks()getMissingHours()等。現在因爲有一個N:M學生和教師之間的關係,我有一個link_teacher_student(ID,TEACHED_ID,STUDENT_ID)表,這是一個「幫手」表。我是否也應該爲它創建類/對象?可以爲數據庫表創建類/對象嗎?

+2

http://en.wikipedia.org/wiki/Object-relational_mapping –

回答

2

是的。這樣做不僅可以,將數據層(或模型)與其他代碼分開是一個好主意。

這樣做意味着您可以編寫更少的代碼來完成更多任務,因爲您不必在整個地方重複使用相同的代碼,這意味着您只需要擔心在需要時更新一段代碼以某種方式改變你的模型。

0

這取決於您的代碼需要多少功能。如果您的網絡應用需要很多基於不同的用戶類型的功能,我會爲每個用戶類型創建一個不同的模型和控制器。如果用戶類型之間的功能沒有太大差別,則可以使用單個統一類,並採用幾種方法進行區分。

我也只是將teacher_id列添加到學生表 - 您不需要創建一個全新的表來映射關係。

3

,您不應該有link_teacher_student表的對象。 This is common thing to do in a RDBMS structure, but not in an OOP model.在OOP模型相同relationsip將是簡單地:

class Teacher { 
    protected $students = array(); 
} 

class Student { 
    protected $teachers = array(); 
} 

你會然後使用DataMapper給init該陣列取出一個TeacherStudent,例如,當你的DAO將查詢教師和join the students和映射器然後create Student objects並填寫他們在老師陣列。

你可以做的是將$students$teachers轉換成Repositories,併爲它們提供查找方法查詢查找表,

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; 
    } 
} 
相關問題