首先,如果您发现自己需要在未在 MVC 框架中创建模型的情况下从表中获取数据,那么您很可能做错了什么。
如果您真的只有 5 个可能的值(MBA、MCA、BCA、BA、PHD),我可能只会在您的表中将它们设为 5 个单独的 tinyint(1) 字段,例如 has_mba、has_mca 等。然后只显示每个在您的视图中作为一个单独的复选框。这可能是最简单的方法。
如果您不想这样做,并且您肯定想要一个单独的 DegreeMst 表,那么您需要的是 hasAndBelongsToMany 关系。
您需要一个单独的连接表,例如 students_degreemsts,其中包含一个 student_id 和一个 degreemst_id 列。您不需要为连接表创建模型。
设置完成后,您视图中输出复选框的代码将类似于:
echo $this->Form->input('Student.DegreeMst',array('label'=>'Select your degrees','multiple'=>'true'));
更新
您将需要 3 个数据库表和 2 个模型。您知道多对多(即 Cake 称之为 hasAndBelongsToMany)的关系和连接表吗?
在您的数据库中,您需要 3 个根据 CakePHP 约定命名的表:
学生 (id, name, address, other_field)
学位 (id, name, another_field)
students_degrees (id, student_id, degree_id)
最后一张表是您的连接表,它应该包含学生和学位表的这两个外键。在 CakePHP 中,连接表不需要模型或控制器。
您显然确实需要为 Students 表创建一个模型,您将在其中定义 hasAndBelongsToMany 关系:
public $hasAndBelongsToMany = array(
'Degree' => array(
'className' => 'Degree',
'joinTable' => 'students_degrees',
'foreignKey' => 'student_id',
'associationForeignKey' => 'degree_id',
),
);
您的学位表还需要一个模型,但您不必在该模型中再次定义 hasAndBelongsToMany 关系,除非您需要它。