如何使用活动记录指定此关系?

时间:2012-07-21 16:43:47

标签: activerecord yii relationship

我对through关系非常困惑。这是我的表格

批次(id,名称)

受试者(ID,BATCH_ID,名称)

老师(ID,姓名)

subject_teacher(subject_id,teacher_id)

关系是

批量HAS_MANY主题

科目BELONGS_TO批次

通过subject_teacher

对MANY_MANY教师进行主题

教师MANY_MANY科目通过subject_teacher

不能如何指定获取

的关系
  1. 批量教师
  2. 分配给教师的批次
  3. 我尝试使用through选项,但它似乎不适用于MANY_MANY关系。除了遍历每个主题之外,还有更好的方法吗?

    编辑: 我知道我可以通过教师模型中的功能获得教师的科目

    public function getBatches()
    {
        $batches=array();
        foreach($this->subjects as $subject)
            $batches[]=$subject->batch;
        return $batches;
    }
    

    现在我可以通过引用$teacher->batches来获得一批教师。但我需要一个更清晰的关系,如解决方案,以便代码中的某些地方我可以发表如Teacher::model()->with('batches')->findAll()

    的声明

1 个答案:

答案 0 :(得分:0)

我认为这是循环播放主题的唯一方法。除非你没有通过活动记录这样做。

  //pseudo code....
  Teacher=new Teacher::model()->with('subject.batch')->find();
  subjects=Teacher->subjects;
  for(subjects as subject){
      batch=subejct->batch;
  }

直通关系只适用于一个或多个案例,而不是多个案例。