2012-07-21 32 views
1

我對through關係verymuch困惑。這裏是我的表如何使用活動記錄指定此關係?

批次(ID,姓名)

主題(ID,BATCH_ID,名)

老師(ID,姓名)

subject_teacher(subject_id,teacher_id)

關係是

批次HAS_MANY科目

個科目通過subject_teacher belongs_to的一批

主題MANY_MANY教師

教師MANY_MANY科目通過subject_teacher

不,我怎麼可以指定讓一批

  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()

回答

0

我認爲這是通過主題循環的唯一方法。除非你不通過活動記錄來完成。

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

直通關係只能應用於一對多或一對一的情況,而不是多對多。

+0

這種解決方案的問題是,我們不能使用任何與(「批次」)的預先加載,我認爲這將導致執行許多查詢 – dInGd0nG 2012-07-21 17:13:17

+0

是的,你可以看到更新的代碼。 – bingjie2680 2012-07-21 17:21:02

+0

它不起作用。由於教師模型中沒有「主題」。這是'科目'。因此,我們不能在使用「subject.batch」() – dInGd0nG 2012-07-21 17:59:46