2012-08-22 73 views
0

DB表:誼:DROPDOWNLIST有關係

  • Mcourse(碩士課程) - >包含課程名稱
  • Lcourse(鏈接 課程 - 課程屬於大學) - >包含外鍵 Mcourse_Id。 &學院Id。

NW問題是

我想顯示的下拉列表使用某高校提供的課程列表。

所以SQL查詢:

選擇Lcourse_Id,Mcourse_Name *從Lcourse內部聯接Mcourse上Lcourse_Mcourse_Id = Mcourse標識..

*Id & value pair for dropdownlist 

我能做到這一點全光照createCommand。他工作得很好。但我不能這樣做關係..幫助我。

回答

0

讓我們想象的,你Mcourse表稱爲courses和型號爲表稱爲Courses分鐘,你Lcourse表稱爲courses_colleges和您的院校表是colleges和型號爲表Colleges

現在,你應該有Courses模型關係:

public function relations() { 
    return array(
     'colleges' => array(self::MANY_MANY, 'Colleges', 'courses_colleges(course_id, college_id)') 
    ); 
} 

Colleges模型應該有類似的關係:

public function relations() { 
    return array(
     'courses' => array(self::MANY_MANY, 'Courses', 'courses_colleges(college_id, course_id)') 
    ); 
} 

現在,如果您想打印一個包含某所大學所有課程的下拉菜單,在您的控制器的操作方法得到,高校,包括其課程的模式:

public function actionShow() { 
    $id = 1; // We set just some sample id. You could get it from request ofc. 
    $college = Colleges::model()->with('courses')->findByPk($id); 
    $this->render('show', array('college'=>$college)); 
} 

現在,在你看來打印出這一點:

echo CHtml::dropDownList('courses', '', CHtml::listData($college->courses, 'id', 'name')); 

'id''name'是你Courses模型列。

就是這樣的。

+0

如果我通過默認範圍設置college_Id ..我必須寫關係嗎? –

+0

您不能通過默認範圍設置college_id,因爲在這種情況下,college_id將保持不變,您將可以僅爲1所大學使用此模型。而關係則描述了模型如何相互聯繫。如果你有鏈接,那麼你應該聲明它。 – Johnatan

+0

每個用戶都有一個college_Id.So病人在登錄後會在會話(yii:app-> User-> CollegeId)中存儲College_Id。在大多數控制器中,我都將默認範圍設置爲collegeId。那麼需要把$ id = yii :: app() - > User-> CollegeId? 默認範圍: 'condition'=>「collge_Id ='」。Yii :: app() - > UserI> CollegeId。「'」, –

0

錯誤出現在您的視圖中的listData()函數中,具體而言,您的Lcourse模型中沒有mc_Id。

由於您尚未闡明每種關係所分配的模型,因此無法猜測您應該在視圖中替代「mc_Id」的內容 - 請檢查Lcourse模型以確定正確的列名稱。

+0

感謝fr的快速回復。 mc_Id在Mcourse模型中..我想內連接Mcourse&Lcourse&hv來獲得Mcourse.mcId&Lcourse.lcors_Id(FK)..hw我應該怎麼辦? –

+0

查詢是這樣的 從lcourse中選擇l.lcors_Id,m.mc_Id作爲'l'內部連接Mcourse作爲l.locrs_mc_Id = m.mc_Id上的'm'。 Hw sud我在下拉列表中執行dis。 –