【问题标题】:How can I specify this relation using active record?如何使用活动记录指定此关系?
【发布时间】:2012-07-21 16:43:46
【问题描述】:

我对@9​​87654322@ 关系感到非常困惑。这是我的桌子

批次(ID,名称)

主题(id,batch_id,name)

老师(身份证,姓名)

subject_teacher(subject_id,teacher_id)

关系是

批处理 HAS_MANY 主题

主题 BELONGS_TO 批次

通过 subject_teacher 对 MANY_MANY 教师进行主题化

通过 subject_teacher 教授 MANY_MANY 科目

不知道如何指定获取关系

  1. 一批教师
  2. 分配给教师的批次

我尝试使用 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()

的声明

【问题讨论】:

    标签: activerecord yii relationship


    【解决方案1】:

    我认为这是遍历主题的唯一方法。除非你不通过活动记录来做。

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

    直通关系只能适用于一对多或一对一的情况,而不是多对多。

    【讨论】:

    • 这个解决方案的问题是我们不能使用任何 with('batches') 进行预加载,我认为这会导致执行许多查询
    • 它不起作用。由于教师模型中没有“主题”。它是“主题”。所以我们不能在 with() 中使用 'subject.batch'
    • 我觉得,没区别,尽量用subjects.batch吧,因为是关系,不是对象,所以单数还是复数都无所谓..不过告诉我如果它有效:)
    • 你可能还需要添加一个 together() 链。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多