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

Activerecord 如何使用活动记录指定此关系?,activerecord,yii,relationship,Activerecord,Yii,Relationship,通过关系,我非常困惑于。这是我的桌子 批次(id、名称) 主题(id、批次id、名称) 教师(身份证、姓名) 学科教师(学科id,教师id) 关系是 批有很多科目 受试者属于批次 通过学科教师,学科多教师 通过学科教师教授许多学科 否如何指定获取的关系 一批教师 分配给老师的课程 我尝试了一个选择,但似乎对很多关系都不起作用。除了反复阅读每一个主题,还有什么更好的方法吗 编辑: 我知道我可以通过教师模型中的函数得到教师的科目 public function getBatches() {

通过关系,我非常困惑于
。这是我的桌子

批次(id、名称)

主题(id、批次id、名称)

教师(身份证、姓名)

学科教师(学科id,教师id)

关系是

批有很多科目

受试者属于批次

通过学科教师,学科多教师

通过学科教师教授许多学科

否如何指定获取的关系

  • 一批教师
  • 分配给老师的课程
  • 我尝试了一个选择,但似乎对很多关系都不起作用。除了反复阅读每一个主题,还有什么更好的方法吗

    编辑: 我知道我可以通过教师模型中的函数得到教师的科目

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

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

    来做一个类似于
    Teacher::model()->的语句。除非你不是通过活动记录

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

    through关系只能应用于一个多或一个一的情况,而不是很多。

    此解决方案的问题是,我们不能使用任何with('batches')进行快速加载,我认为这将导致执行许多查询,但它不起作用。因为在教师模式中没有“主体”。它是“主题”。所以我们不能在()中使用'subject.batch',我想,它没有区别,试着使用subjects.batch,因为它是关系,而不是对象,所以它是单数还是复数都无所谓。但是让我知道它是否有效:)你可能也需要添加一个together()链。