2011-08-01 2 views
3

Я строитель сайта, у меня есть несколько таблиц, и нормально ли строить класс и создавать один его объект на основе этой таблицы? У меня есть учитель таблицы (ID, Username) и класс, основанный на нем получил giveMark(), editMark() и т.д. Еще один студент (ID, NAME) таблица, с getMarks(), getMissingHours() и т.д. Теперь, так как есть N: M отношения между учениками и учителями, у меня есть таблица link_teacher_student (ID, TEACHED_ID, STUDENT_ID), которая скорее является «вспомогательной» таблицей. Должен ли я создать для него класс/объект?Можно ли создать класс/объект для таблицы базы данных?

+2

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

ответ

2

Да. Это не совсем нормально, так это отличная идея отделить ваш уровень данных (или модель) от остальной части вашего кода.

Это означает, что вы можете написать меньше кода, чтобы получить больше результатов, поскольку вам не нужно повторять один и тот же код повсюду, и это означает, что вам нужно только беспокоиться об обновлении одного фрагмента кода, когда вам нужно измените свою модель каким-то образом.

0

Это зависит от того, сколько функциональности вам нужно от вашего кода. Если ваше веб-приложение будет требовать множество функций на основе разных типов пользователей, я бы создал для них другую модель и контроллер. Если нет никакой разницы в функциональности между пользовательскими типами, вы можете просто использовать один унифицированный класс, используя еще несколько методов для дифференциации.

Я бы также добавил столбец teacher_id на стол студента - вам не нужно создавать целую новую таблицу для сопоставления отношения.

3

No, у вас не должно быть объекта для таблицы link_teacher_student. This is common thing to do in a RDBMS structure, but not in an OOP model. То же relationsip в модели ООП, было бы просто:

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

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

Вы бы затем использовать DataMapper инициализировать этот массив при выборке в Teacher или Student, например ваш DAO запросит у преподавателя и join the students, а затем Mapper будет 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; 
    } 
} 
Смежные вопросы