1

私はthrough関係と非常に混乱しています。これが私のテーブルです

バッチ (id,name)

件名 (id,batch_id,name)

先生(ID,名前)

subject_teacher(subject_id,teacher_id)

関係は

バッチ HAS_MANY 件名

科目 BELONGS_TO バッチ

subject_teacher 経由の対象 MANY_MANY 人の教師

subject_teacher 経由の MANY_MANY 件の教師

いいえ、取得するための関係を指定するにはどうすればよいですか

  1. バッチの教師
  2. 教師に割り当てられたバッチ

throughオプションを試してみましたが、MANY_MANY リレーションではうまくいかないようです。各科目を繰り返す以外に良い方法はありますか?

編集:Teacherモデルの関数で教師の科目を取得できることを知っています

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

を参照して教師のバッチを取得できるようになりました$teacher->batches。しかし、コードのどこかで次のようなステートメントを作成できるように、解決策のようなよりクリーンな関係が必要ですTeacher::model()->with('batches')->findAll()

4

1 に答える 1

0

主題をループする唯一の方法だと思います。アクティブなレコードを介してそれを行わない限り。

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

through リレーションシップは、多対多ではなく、1 対多または 1 対 1 の場合にのみ適用できます。

于 2012-07-21T16:56:26.753 に答える