2011-08-01 6 views
3

私はサイトビルダーです。いくつかのテーブルがあります。そのテーブルに基づいて、常にクラスを作成してそのオブジェクトを作成しても問題ありませんか? M:私はgiveMark()editMark()などNがありますので、もう一つはgetMarks()学生(ID、NAME)テーブル、getMissingHours()など今あるのだ教師テーブル(ID、USERNAME)と、それに基づいて、クラスを持っています学生と教師の関係、私はlink_teacher_student(ID、TEACHED_ID、STUDENT_ID)テーブルを持っています。これはむしろ "ヘルパー"テーブルです。クラス/オブジェクトも作成する必要がありますか?データベーステーブルのクラス/オブジェクトを作成することはできますか?

+2

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

答えて

2

はい。これを行うだけではなく、データレイヤー(またはモデル)をコードの他の部分から分離することをお勧めします。

このようにすると、場所を選ばずに同じコードを繰り返す必要がなくなるため、コードを少なく書くことができ、必要なときに1つのコードを更新するだけで心配することができます。モデルを何らかの形で変更してください。

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

あなたはその後、例えば、Teacher又はStudentをフェッチするときに、配列を初期化するためにDataMapperを使用しますDAOは教師を照会し、join the studentsとなり、Mapperはcreate Student objectsになり、先生の配列に入力されます。

何ができるのですか?$studentsまたは$teachersRepositoriesに入力し、ルックアップテーブルを照会するメソッドを提供します。

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; 
    } 
} 
関連する問題