0

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

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

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

我想在我的视图中从数据库中获取 DegreeMst 数据作为多个选项。我的问题是,在这种多对多关系中,我是否必须创建一个新模型 DegreeMst 然后创建与 Student 模型的多对多关系。

或者我可以在不创建新的 Model DegreeMst 的情况下做到这一点吗

4

1 回答 1

2

首先,如果您发现自己需要在未在 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 关系,除非您需要它。

于 2013-02-21T09:47:18.537 回答