0

我阅读了 Containable部分,但没有找到一个明确的示例来用可包含查询替换对 habtm 关系的内部联接查询。例子 :

模型

Student hasAndBelongsToMany Teacher
Teacher hasAndBelongsToMany Student

询问

$joins = array(
    array(
        'table' => 'teachers_students',
        'type' => 'INNER',
        'conditions' => array(
            'teachers_students.teacher_id' => $teacherId,
            'teachers_students.student_id = Student.id'
        )
    )
);

$data = $this->find('all', array('joins' => $joins));

注释

  • hasAndBelongsToMany每个模型中设置属性。
  • 对模型的伪变量$this引用:class Student
  • $teacherId是一个参数(有一个过滤器可以显示属于某个特定教师的学生)。

我在寻找什么

为了能够在没有 的情况下编写相同的查询joins,使用contain. 就像是 :

$contain = array(
    'Teacher' => array(
        'conditions' => array('???' => '???')
    )
);    

$data = $this->find('all', array('contain' => $contain));
4

1 回答 1

1

如果我理解您的问题(试图为特定教师获取学生),您需要 A)使用联接,或 B)切换查询的方向并从教师模型构建它:

//Teacher Model
$this->find('all', array(
    'conditions' => array('Teacher.id' => $teacherId),
    'contain' => array(
        'Student'
    )
);

您不能根据包含模型的条件限制主模型的结果,因为使用“包含”实际上会创建单独的查询。

于 2014-08-13T14:37:16.607 回答