2014-03-29 89 views
1

我將使用CakePHP手冊中的CourseMembership示例來說明我的問題。因此,有如下表:如何創建「belongsTo」「hasMany through」加入模型的模型?

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屬於關聯CourseMembership
  • CourseMembership的hasMany CourseMembershipProperty

爲了簡便起見,CourseMembershipProperty模型的表可以有兩種VARCHAR領域,namevalue

回答

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數據的複合主鍵應被刪除並且被用作外鍵。如果不首先糾正這個問題,課程成員模式將會變得不合時宜。

之後,CourseMembershipProperty型號應通過使用course_membership_id的外鍵鏈接到CourseMembership型號。這應該通過簡單地定義模型來工作,因爲我們現在將遵循CakePHP命名約定。

相關問題