0

数据库表:

  • Mcourse(硕士课程)-> 包含课程名称
  • Lcourse(Linked Course- 课程属于一所大学) -> 包含外键 Mcourse_Id。和大学 ID。

问题是

我想使用下拉列表显示大学中可用的课程列表。

所以sql查询是:

从 Lcourse 内部选择 Lcourse_Id, Mcourse_Name* 在 Lcourse_Mcourse_Id=Mcourse Id 上加入 Mcourse..

*Id & value pair for dropdownlist

我可以使用 createCommand 来做到这一点。它工作得很好。但我不能这样做使用关系..帮助我。

4

2 回答 2

0

错误出现在您视图中的 listData() 函数中,特别是您的 Lcourse 模型中没有 mc_Id。

由于您尚未阐明为每个关系分配的模型,因此无法猜测您应该在视图中用什么替代“mc_Id” - 检查您的 Lcourse 模型以确定正确的列名。

于 2012-08-22T21:41:56.390 回答
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'));

Where'id''name'Courses模型的列。

类似的东西。

于 2012-08-23T09:54:47.067 回答