0

t know howto accessing data from a related table (with ActiveRecords) and use all those records as a dataSource for a CActiveDataProvider. The main idea is that a user must be able toは彼のクラスのコースだけをCRUD`します。

次のテーブルがあります。

user (id, name, age, email...),
user_class (user_id, class_id),
class (id, name, description, ...),
course (id, class_id, name, description);

User テーブルと Class テーブルには多対多の関係があり、Class テーブルと Course テーブルには 1対多の関係があります。

また、次の関係を定義しました。

ユーザー モデルの関係:

'classes'=>array(
    self::MANY_MANY,
    'Class',
    'user_class(user_id, class_id)',
    ),
'courses'=>array(
    self::HAS_MANY,
    'Course',
    array('class_id','id'),
    'through'=>'classes'
)

クラス モデルの関係:

'users' => array(
    self::MANY_MANY,
    'User',
    'user_class(class_id, user_id)'
),
'courses' => array(
    self::HAS_MANY,
    'Class',
    'class_id'
),

コース モデルの関係:

'class' => array(
    self::BELONGS_TO,
    'Class',
    'class_id'
)

私のCourseControllerでは、actionManage()次のようなものがあります。

public function actionManage() {
    $currentUser = User::model()->with('classes', 'courses')->findByPk(Yii::app()->user->id);
    $userCourses = $currentUser->classes->courses; //--> NO courses!!!
    /* add users` courses to an CActiveDataProvider //--> how to do this?!
}
4

1 に答える 1

0

試してみるとvar_dump($currentUser->classes);、それが配列であることがわかります。

$userCourses = $currentUser->classes[0]->courses;関連付けられたクラスがある場合に機能します$currentUser

多くのものを遅延してロードしているため (各「クラス」は、最初に要求されたときにその「コース」をロードします)、これは途中で遅くなる可能性がありますが、今のところ、それで実行すると思います.

于 2013-04-26T22:27:00.817 に答える