2011-07-29 7 views
1

私は次のことを関連付けるために使用すべき関係タイプを把握しようとしています:CakePHPのモデル協会

私たちは、教師と生徒を持って教室を持っています。

生徒と教師が所属教室。しかし、他の方法についてはどうですか?

私は教室のモデルで、次を使用することができます。

var $hasMany = array('Students');

var $hasOne = array('Teacher');

感謝。

+0

これらのモデルでは、どのような操作制約を設定するかによって異なります。実生活では、生徒は多くの教師を持つことができます。あなたのアプリに1人の教師しかいない場合、hasOneは正しい関係になります。 –

+0

私の場合、教室は行政上のもので、教室にアクセスして学生や教師を見ることができます。教室には複数の生徒と1人の教師がいます。学生は1つの教室にしか所属できません。教師は教室を担当しており、教室に生徒をリストする能力を持っている必要があります。 – AlexBrand

答えて

1

どのようにデータを取得および/またはモデル化するかによって異なります。あなたのClassroomsは一Teacher、またはTeachersは一つだけClassroomを持って、あなたもClassroomTeacherの場を作って逃げることができなければならないと仮定すると、

しかし、お互いに抽象化しておきたいと思います。この場合、モデルは次のようになります。

// classroom.php 
class Classroom extends AppModel { 
    var $hasMany = array('Student'); 
    var $hasAndBelongsToMany = array('Teacher'); 
} 

// teacher.php 
class Teacher extends AppModel { 
    var $hasMany = array('Student'); 
    var $hasAndBelongsToMany = array('Classroom'); 
} 

// student.php 
class Student extends AppModel { 
    var $belongsTo = array('Teacher', 'Classroom'); 
} 
+0

教師モデルで$ hasAndBelongsToを少し説明できますか? $ belongsToとの違いは何ですか?ありがとう! – AlexBrand

+0

これらの関係を考えているときは、モデルが簡単に結合できるように存在することを覚えておいてください。$ hasAndBelongsToManyは*クロスジョイント*ともっと複雑な方法で結合することができます。投稿したユーザーとコメントで返信したユーザーのあるブログを持っているとします。ユーザーは投稿の一部でも、コメントの一部でもかまいません(たとえば、ユーザー名タグ付けがあった場合)、投稿を「所有」したり、コメントを所有したりすることができます。シンプルな$ hasMany、または$ belongsTo関係は、これらの関係の双方向性をうまく処理しません。私はこれを読むことをお勧めします:http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM – dclowd9901

0

それはあなたの状況に非常に依存しますが、私の古い学校ではそれは本当に正しかったかもしれませんが、追加する必要はないかもしれません。

教師は多くの学生を持ってい 教室がある1人の教師 教室は、多くの学生が

を持って、学生が動き回るのですか?学生と教室の関係はまったく必要ですか?私はこの事例で最も明確な関係は教師 - 生徒関係であると思います。それから教師と教室。あなたは、ある学生が教室の一部であるという関係に基づいて推測することができます。したがって

教室 - 先生 - あなたはその後、教師を経て、教室の学生を見つけるだろう<学生 教室(1を持っている)先生(多くを持っている)学生