2011-08-08 47 views
1

我有以下關係成立:CakePHP的HABTM找到條件

老師:

var $hasAndBelongsToMany = array(
    'Classroom' => array(
     'className' => 'Classroom', 
     'joinTable' => 'classrooms_teachers', 
     'foreignKey' => 'teacher_id', 
     'associationForeignKey' => 'classroom_id', 
     'unique' => true, 
    ) 
); 

課堂:

var $hasAndBelongsToMany = array(
    'Teacher' => array(
     'className' => 'Teacher', 
     'joinTable' => 'classrooms_teachers', 
     'foreignKey' => 'classroom_id', 
     'associationForeignKey' => 'teacher_id', 
     'unique' => true, 
    ) 
); 

var $hasMany = array(
'Student' => array(
     'className' => 'Student', 
     'foreignKey' => 'classroom_id', 
     'dependent' => false, 
    ), 
); 

學生:

var $belongsTo = array(
    'Classroom' => array(
     'className' => 'Classroom', 
     'foreignKey' => 'classroom_id', 
    ), 
); 

我想爲老師創建一個儀表板,然後e顯示通過教室與教師相關的所有學生。

我使用下面的查找操作:

$students = $this->Teacher->Classroom->find('all', array(
             'conditions' => array('Classroom.teacher_id' => $this->Access->getTeacherId()), 
    )); 

不過,我得到一個錯誤:Unknown column 'Classroom.teacher_id' in 'where clause'

我必須做一些錯誤的,因爲蛋糕是不是做的關聯。

任何想法?

+1

滑稽的故事,我一直在尋找一個解決我的問題,用Google搜索「HABTM條件」,發現這一點。有趣的部分?我有一個老師,學生和一個學校班級模型: - /有點可怕 –

回答

1

這不是最好的方法。只要使用中可容納和find(「第一」),你並不需要找到所有:

$students = $this->Teacher->find('first', array(
     'conditions' => array('Teacher.id' => $this->Access->getTeacherId()), 
     'contain' => array('Classroom'=>array('Student')) 
)); 

,將讓你與老師相關的所有教室和學生在教室裏的那些。

+0

我會試試這個!非常感謝! – AlexBrand

3

這是實現這一目標的正確方法:

 $this->Teacher->bindModel(array('hasOne' => array('ClassroomsTeachers'))); 

    $students = $this->Teacher->find('all', array(
             'conditions' => array('ClassroomsTeachers.teacher_id' => $this->Access->getTeacherId()), 
             'recursive' => 2 
    )); 

我希望它可以幫助別人!