我正在尝试检查试图管理教室的老师(在我的应用程序中)是否真的负责给定的教室。老师有教室,反之亦然。
有没有办法在教师模型中编写一种方法,其中我提供用户ID和教室ID,并根据对应于课堂的教师返回true或false。
我尝试了以下代码,但它给了我很多关于模型的额外信息,但我并不真正需要这些信息。一定有更好的方法:
$this->bindModel(array('hasOne' => array('ClassroomsTeachers')));
return $this->find('all', array(
'conditions' => array('ClassroomsTeachers.teacher_id' => $id),
));谢谢
发布于 2011-08-30 10:11:26
HABTM关系只是一个hasMany-belongsTo关系的抽象。
Classroom hasMany ClassroomsTeacher belongsTo教师。
您可以像访问任何其他模型一样访问加入模型。如果表格为classrooms_teachers,则模型名称为ClassroomsTeacher (ClassroomsTeachers的单数)。
$this->Classroom->ClassroomsTeacher->find('count', array(
'conditions' => array('teacher_id' => $id, 'classroom_id' => $classroomId)
));发布于 2011-08-30 08:58:41
"Cake“的方法如下所示:
$this->Classroom->find('first',array(
'conditions'=>array(
'Classroom.id'=>$classrom_id_var
),
'recursive'=>1
)这使用默认的recursive标志。我强烈建议您使用类似的内置Containable行为,因此您可以执行以下操作:
$classdata = $this->Classroom->find('first',array(
'conditions'=>array(
'Classroom.id'=>$classrom_id_var
),
'contain'=>array('Classroom')
)这两种方法中的任何一种都会得到一个类似下面的数组:
array(
[Classroom] => array(
...teacher data...
),
[Teacher] => array(
[0] => array(
[id] => 4
....
),
[1] => array( ...teacher 2 data... ),
[2] => array( ...teacher 3 data... ),
)
)然后,您可以遍历教师数组,并确保有问题的教师在该数组中。
对于后一项任务,您可能希望使用有用的内置Set实用程序-您可以执行以下操作:
$teacherlist = Set::extract($classdata,'/Classroom/id');
if(in_array($teacherlist, $id)) {
//They're okay
} else {
//Return an error
}如果你真的想把它写在一个模型函数中,可以查看find中的join选项--它比bindModel要简单得多。或者查看Habtamable behavior。
(编辑为在重读问题后翻转)
https://stackoverflow.com/questions/7237591
复制相似问题