【问题标题】:cakePHP HABTM find with conditionscakePHP HABTM 查找条件
【发布时间】:2011-10-22 18:56:42
【问题描述】:

我建立了以下关系:

老师:

    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'

我一定是做错了什么,因为 cake 没有做关联。

有什么想法吗?

【问题讨论】:

  • 有趣的故事,我一直在寻找解决问题的方法,谷歌搜索“HABTM 条件”并找到了这个。有趣的部分?我有一个老师,一个学生和一个班级模型:-/有点吓人

标签: cakephp


【解决方案1】:

这是实现此目的的正确方法:

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

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

希望对大家有所帮助!

【讨论】:

    【解决方案2】:

    这不是最好的方法。只需使用containable和find('first'),就不需要find all:

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

    这将为您提供与该教师相关联的所有教室以及这些教室中的所有学生。

    【讨论】:

      【解决方案3】:

      我做了一个行为来解决HABTM问题。

      在这里发布我的答案:

      HABTM Find with CakePHP 2.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多