如何创建“belongsTo”为“hasMany through”连接模型的模型?

时间:2014-03-29 20:23:03

标签: php cakephp relationship cakephp-2.4

我将使用CakePHP手册中的CourseMembership示例来说明我的问题。所以有以下表格:

CREATE TABLE course ( id INT NOT NULL PRIMARY KEY, course_name VARCHAR(255) ); CREATE TABLE student ( id INT NOT NULL PRIMARY KEY, student_name VARCHAR(255) ); CREATE TABLE course_membership ( course_id INT NOT NULL REFERENCES(course.id), student_id INT NOT NULL REFERENCES(student.id), attended_lectures TINYINT NOT NULL DEFAULT 0, PRIMARY KEY (course_id, student_id) );

我的模特看起来像这样:

class Course extends AppModel {
    public $hasMany = array('CourseMembership');
}
class Student extends AppModel {
    public $hasMany = array('CourseMembership');
}
class CourseMembership extends AppModel {
    public $belongsTo = array('Course', 'Student');
}

在此设置中添加CourseMembershipProperty模型/表的最佳方法是什么?我对模型类中的模式和关系配置很好奇。

关系应该是:

  • CourseMembershipProperty belongsTo CourseMembership
  • CourseMembership hasMany CourseMembershipProperty

为简单起见,CourseMembershipProperty模型表可以包含两个VARCHAR字段,namevalue

1 个答案:

答案 0 :(得分:0)

有一些问题:

您的表名应该是多元的:

course应为courses

student应为students

course_membership应为course_memberships

请注意CakePHP食谱中的这一部分:

http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions

  

“CakePHP不支持复合主键。”

course_memberships表的主键id应自动递增,并且应删除course_id和student_id的复合主键,并将其用作外键。如果不首先纠正这个问题,CourseMembership模型就会行为不端。

之后,CourseMembershipProperty模型应使用CourseMembership的外键链接到course_membership_id模型。这应该只是在您的示例中定义模型,因为我们此时将遵循CakePHP命名约定。