YII:Dropdownlist与关系

YII:Dropdownlist与关系,yii,relational-database,inner-join,Yii,Relational Database,Inner Join,数据库表: Mcourse(硕士课程)->包含课程名称 L课程(链接) 课程-课程属于学院)->包含外键 Mcourse_Id和college Id 问题是 我想使用dropdownlist显示学院中可用的课程列表 因此,sql查询是: 从Lcourse\u Mcourse\u Id=Mcourse Id上的Lcourse内部联接Mcourse中选择Lcourse\u Id,Mcourse\u Name* 我可以用createCommand做这件事。它工作得很好。但是我不能在关系中这样做。帮

数据库表:

  • Mcourse(硕士课程)->包含课程名称
  • L课程(链接) 课程-课程属于学院)->包含外键 Mcourse_Id和college Id
问题是

我想使用dropdownlist显示学院中可用的课程列表

因此,sql查询是:

从Lcourse\u Mcourse\u Id=Mcourse Id上的Lcourse内部联接Mcourse中选择Lcourse\u Id,Mcourse\u Name*


我可以用createCommand做这件事。它工作得很好。但是我不能在关系中这样做。帮帮我。

错误在您视图中的listData()函数中,特别是您的Lcourse模型中没有mc\u Id


由于您尚未阐明每个关系所分配的模型,在视图中,您不可能猜到应该用什么来代替“mc_Id”-检查您的Lcourse模型以确定正确的列名。

让我们想象一下,您的
Mcourse
表被称为
courses
,该表的模型被称为
courses
,您的
Lcourse
表被称为
courses\u colleges
,您的colleges表是
colleges
,该表的模型是
colleges

现在,您应该拥有具有关系的
课程
模型:

public function relations() {
    return array(
        'colleges' => array(self::MANY_MANY, 'Colleges', 'courses_colleges(course_id, college_id)')
    );
}
public function relations() {
    return array(
        'courses' => array(self::MANY_MANY, 'Courses', 'courses_colleges(college_id, course_id)')
    );
}
您的
学院
模型应具有类似关系:

public function relations() {
    return array(
        'colleges' => array(self::MANY_MANY, 'Colleges', 'courses_colleges(course_id, college_id)')
    );
}
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'
是您的
课程
模型的列


诸如此类。

谢谢您的快速回复。mc_Id在Mcourse模型中..我想内部连接Mcourse&Lcourse&hv以获取Mcourse.mcId&Lcourse.lcors_Id(FK)…我应该怎么做?查询类似于选择l.lcors_Id,l.locrs\u mc\u Id=m.mc\u Id.Hw sud在dropdownlist中实现dis。您不能通过默认范围设置学院Id,因为在这种情况下,学院Id将是常量,并且您可以仅为1所学院使用此模型。关系描述了模型是如何相互关联的。如果你有这个链接,那么你无论如何都应该声明它。每个用户都有一个学院Id。因此,一旦他们登录,我将在会话(yii:app->User->CollegeId)中存储学院Id在大多数控制器中,我将默认范围设置为collegeId。那么,把$id=yii::app()->User->CollegeId放进去有什么必要呢??默认范围:“条件”=>“collge_Id=”。Yii::app()->User->CollegeId。“”,不使用默认范围。这只是一个建议。如果您想在那里使用scope,可以在模型中创建新的scope方法,例如
default\u college
,然后在搜索模型时:
Courses::model()->default\u college()->findAll()重要的是要知道,您不能动态删除默认范围。例如,如果将来用户想要查看另一所大学的课程,他将无法做到这一点。你将无法对其进行编程。使用默认范围是非常糟糕的。你有博客吗..这样我就可以关注你了吗?不,对不起,我没有博客。但是你可以在推特上找到很多好东西:@tonydspaniard每天都会发布很多关于Yii的链接和有趣的文章。