我刚开始学习CakePHP并在这种情况下需要帮助。
我有一个表(学生)和相应的模型(学生),它有一个名为'教育资格'的属性,可以有多个值(MBA,MCA,BCA,BA,PHD),所以我创建了一个包含主表所有学位列表。
现在,当学生要自己注册时,他必须在资格中选择多个选项。
我希望在View中将数据库中的DegreeMst数据作为多个选项。 我的问题是,在这种多种关系中我是否必须创建一个新模型DegreeMst,然后与Student模型创建ManytoMany关系。
或者我可以在不创建新的Model DegreeMst
的情况下执行此操作答案 0 :(得分:2)
首先,如果您发现自己需要从表中获取数据而不在MVC框架中创建模型,那么您很可能会出错。
如果你真的只有5个可能的值(MBA,MCA,BCA,BA,PHD),我可能只会在你的表中创建5个独立的tinyint(1)字段,比如has_mba,has_mca等。然后只需在视图中显示每个复选框。这可能是最简单的方法。
如果您不想这样做,并且您肯定想要一个单独的DegreeMst表,那么您需要的是hasAndBelongsToMany relationship。
您需要一个单独的连接表,例如students_degreemsts,其中包含student_id和degreemst_id列。您不需要为连接表创建模型。
设置完成后,视图中输出复选框的代码将类似于:
echo $this->Form->input('Student.DegreeMst',array('label'=>'Select your degrees','multiple'=>'true'));
更新
您需要3个数据库表和2个模型。你知道多对多(即Cake调用hasAndBelongsToMany)关系和joins tables?
在您的数据库中,您需要3个表,根据CakePHP对话命名:
学生(身份证,姓名,地址,其他_字段)
度(id,name,another_field)
students_degrees(id,student_id,degree_id)
最后一张表是你的加入表,它应该包含学生和度表的那两个外键。在CakePHP中,您不需要连接表的模型或控制器。
你显然需要一个学生表的模型,你可以在这里定义你的hasAndBelongsToMany关系:
public $hasAndBelongsToMany = array(
'Degree' => array(
'className' => 'Degree',
'joinTable' => 'students_degrees',
'foreignKey' => 'student_id',
'associationForeignKey' => 'degree_id',
),
);
您还需要一个适用于学位表的模型,但您不必在该模型中再次定义hasAndBelongsToMany关系,除非您需要它。