科目と学生がMANY_MANYですが、あなたは間違ってそれを少し書いて、これは何が必要であるとの関係:「あなた一度
class Subjects extends CActiveRecord
{
// ...
public function relations()
{
return array(
'Students'=>array(self::MANY_MANY, 'Students', 'Students_taken_Subjects(Subject_ID, Student_ID)'),
);
}
// ...
}
この関係を記述すると、科目のアクティブレコードには、その科目を受講する0人以上の学生がいる配列を返すStudentsプロパティがあります。あなたはこのようにそれらにアクセスすることができます。
$subject = Subjects::model()->findByPk($pk);
$students = $subject->Students; // an array with the subject's students
上記のコードは2 DBアクセス、$対象用と関連$学生のための1になります。これはうまくいくかもしれませんが、多くのテーマにアクセスしていると、あまりにも多くの「怠惰な読み込み」が問題になる可能性があります。あなたは「熱心な負荷」は、このような対象者と一緒に生徒のYiiを伝えることができます: - (「学生」)で使用して -
$subjects = Subjects::model()->with('Students')->findAll();
ここ
あなたが科目のすべてを見つけることが、Yiiのを警告しているあなたのこと各科目の学生情報も欲しいと思っています。これにより、あなたが見つけた科目に関連するすべての生徒が一度に手に入るようになります。 with()
機能の代わりに、基準のwith
プロパティを使用することです:
$criteria=new CDbCriteria;
$criteria->with = array('Students');
$subjects = Subjects::model()->findAll($criteria);
いずれかの方法で、あなたはこのような被験者の学生を求めるないとき:
$subjects[0]->Students;
$subjects[1]->Students;
// ...
あなたはそれぞれ別のDBコールを取得することはありませんYiiはすでにデータを読み込んでいるためです。
詳細については、データ提供者の学生が何をしたいのかについて詳しく説明する必要があります。