CakePHP HABTM найти с условиями - PullRequest
1 голос
/ 09 августа 2011

У меня установлены следующие отношения:

Учитель:

    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',
    ),
  );

Я пытаюсь создать информационную панель для учителей, где отображаются все учащиеся, связанные с учителем в классе.

Я использую следующую операцию поиска:

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

Однако яполучаю ошибку: Unknown column 'Classroom.teacher_id' in 'where clause'

Я, должно быть, делаю что-то не так, потому что торт не делает ассоциаций.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Это правильный способ достижения этой цели:

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

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

Надеюсь, это кому-нибудь поможет!

1 голос
/ 09 августа 2011

Это не лучший способ. Просто используйте содержащуюся и найдите ('first'), вам не нужно искать все:

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

Это даст вам все классные комнаты, связанные с учителем, и всех учащихся в этих классах.

0 голосов
/ 10 марта 2013

Я сделал поведение, чтобы решить проблему HABTM.

Разместил мой ответ здесь:

HABTM Find with CakePHP 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...