2013-04-26 153 views
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); 

用戶和Class表具有多對多和類與課程表具有一對多關係

我還定義了以下關係:

用戶型號關係:

'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?! 
} 
+1

'$ userCourses = $ currentUser-> classes-> courses;'不起作用,因爲'$ userCourses = $ currentUser-> classes'返回一個數組,因此沒有關係'courses' – Tim 2013-04-26 17:36:03

回答

0

如果您嘗試var_dump($currentUser->classes);你會注意到它是一個數組。

$userCourses = $currentUser->classes[0]->courses;將工作是否有與$currentUser

既然你延遲加載很多東西相關類(每一個「類」加載其‘課程,’他們要求的第一次),這可能成爲減緩這條路,但現在,我猜想,它運行。

+0

「這可能會變慢道路「,我該如何改進呢?任何示例/鏈接都會很棒。 – Larry 2013-04-27 06:08:50