2011-08-30 4 views
1

수업을 관리하려고하는 교사 (내 앱의 경우)가 실제로 주어진 교실을 담당하는지 확인하려고합니다. A 교사 habtm 교실 및 viceversa.CakePHP - 직접 HABTM 테이블을 쿼리하는 방법이 있습니까?

Teacher 모델에서 사용자 ID와 클래스 룸 ID를 제공하는 메소드를 작성하는 방법은 없으며 클래스 룸에 해당하는 교사에 따라 true 또는 false를 반환합니다.

다음 코드를 사용해 보았지만 실제로 필요하지 않은 모델에 대한 많은 추가 정보를 제공했습니다.

$this->bindModel(array('hasOne' => array('ClassroomsTeachers'))); 
    return $this->find('all', array(
      'conditions' => array('ClassroomsTeachers.teacher_id' => $id), 
    )); 

감사

답변

2

(다시 판독 질문 후 주위 플립 편집).
교실 수 많은 교실 교사들 belongsTo 교사.
다른 모델과 마찬가지로 참여 모델에 액세스 할 수 있습니다. 표가 classrooms_teachers 인 경우 모델명은 ClassroomsTeacher (단 하나의 ClassroomsTeachers)입니다.

$this->Classroom->ClassroomsTeacher->find('count', array(
    'conditions' => array('teacher_id' => $id, 'classroom_id' => $classroomId) 
)); 
-1

다음과 같이 될 것입니다 수행하는 "케이크"방법 :

$this->Classroom->find('first',array(
    'conditions'=>array(
     'Classroom.id'=>$classrom_id_var 
    ), 
    'recursive'=>1 
) 

이 기본 recursive 플래그를 사용하는 더 나은 방법이 있어야한다. 당신이 할 수 있도록 내가보기 엔, 유사한 내장 Containable behavoir 추천 할 것입니다 다음

array(
    [Classroom] => array(
     ...teacher data... 
    ), 
    [Teacher] => array(
     [0] => array(
      [id] => 4 
      .... 
     ), 
     [1] => array(...teacher 2 data...), 
     [2] => array(...teacher 3 data...), 
    ) 
) 

당신은 할 수 그럼 그냥 :

$classdata = $this->Classroom->find('first',array(
    'conditions'=>array(
     'Classroom.id'=>$classrom_id_var 
    ), 
    'contain'=>array('Classroom') 
) 

을 다음 중 하나를 당신에게 다음과 같은 배열을 얻을 것이다 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을 살펴보십시오.

는 HABTM 관계가-belongsTo를 hasMany의 관계 단지 추상화

관련 문제