2011-07-29 93 views
1

我试图找出其中的关系类型,我应该使用涉及以下内容:CakePHP的模型关联

我们必须具有教师和学生的课堂。

学生和老师都属于教室。但是反过来呢?

我可以在课堂模式如下:

var $hasMany = array('Students');

var $hasOne = array('Teacher');

感谢。

+0

它取决于您希望在这些模型上具有哪些操作约束。在现实生活中,一个学生可以有很多老师;但是如果一个学生在你的应用中只能有一位老师,那么hasOne就是正确的关系。 –

+0

好吧,对我来说,教室更像是一种行政事务,我可以在教室里看到学生和老师。一个教室可以有多个学生和一个教师。一名学生只能属于一个教室。老师负责教室,并且应该有能力列出课堂上的学生。 – 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

它非常依赖于你的情况,但在我的老学校,这确实是正确的,虽然也许是不必要的关系增加。

教师有很多学生 教室有一个老师 课堂有很多学生

然而,做学生走动?学生和课堂之间的关系是否完全必要?我认为在这种情况下最重要的关系是师生关系。然后也许是老师教室。你可以根据这些关系,一些学生是教室的一部分来猜测。

因此:

课堂 - 教师 - 学生<课堂 (有一个)教师(有很多)学生

然后,您可以通过老师发现教室的学生。