我正在尝试检查教师试图管理教室(在我的应用程序的情况下)是否实际上负责给定的教室。老师讨论教室和反之亦然。
有没有办法在Teacher模型中编写一个方法,我提供用户ID和Classroom ID,并根据与Classroom相对应的Teacher返回true或false。
我尝试使用以下代码,但它给了我很多关于我不需要的模型的额外信息。必须有更好的方法:
$this->bindModel(array('hasOne' => array('ClassroomsTeachers')));
return $this->find('all', array(
'conditions' => array('ClassroomsTeachers.teacher_id' => $id),
));
由于
答案 0 :(得分:2)
HABTM关系只是hasMany-belongsTo关系的抽象
课堂上有很多课堂教师都属于老师
您可以像任何其他模型一样访问加入模型。如果表格为classrooms_teachers
,则模型名称为ClassroomsTeacher
(ClassroomsTeachers的单数)。
$this->Classroom->ClassroomsTeacher->find('count', array(
'conditions' => array('teacher_id' => $id, 'classroom_id' => $classroomId)
));
答案 1 :(得分:-1)
“蛋糕”的方式如下:
$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... ),
)
)
然后,您可以直接浏览Teacher数组,并确保相关教师在该数组中。
对于后一项任务,您可能希望使用有用的内置Set实用程序 - 您可以执行以下操作:
$teacherlist = Set::extract($classdata,'/Classroom/id');
if(in_array($teacherlist, $id)) {
//They're okay
} else {
//Return an error
}
如果你真的想在模型函数中编写它,请查看find中的join选项 - 它比bindModel更容易。或者查看Habtamable behavior。
(重新阅读问题后编辑翻转)