CakePHP 2.x - 从表中获取数据而不创建模型

时间:2013-02-21 08:56:11

标签: associations cakephp-2.0

我刚开始学习CakePHP并在这种情况下需要帮助。

我有一个表(学生)和相应的模型(学生),它有一个名为'教育资格'的属性,可以有多个值(MBA,MCA,BCA,BA,PHD),所以我创建了一个包含主表所有学位列表。

现在,当学生要自己注册时,他必须在资格中选择多个选项。

我希望在View中将数据库中的DegreeMst数据作为多个选项。 我的问题是,在这种多种关系中我是否必须创建一个新模型DegreeMst,然后与Student模型创建ManytoMany关系。

或者我可以在不创建新的Model DegreeMst

的情况下执行此操作

1 个答案:

答案 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关系,除非您需要它。