与许多模型关联的cakephp模型
我正在使用CakePHP2.4,我需要一个名为文件的模型来存储用户、案例和卡车的文件信息。现在,文件可以与许多其他模型(用户、案例、卡车等)关联。换句话说,我希望用户拥有文件,案例拥有文件,卡车拥有文件 我是否需要创建UserFiles模型、CaseFiles模型和TruckFiles,或者我是否可以有一个表条目,在文件中标记它是用户记录、案例记录或卡车记录?我也希望对注释和任务执行相同的操作,因此可能会有UserNotes、CaseNotes和TruckNotes,或者我可以有注释(id、foreign_id、associatedModel(可能是Truck、User或Case)等等)。因此,当我创建我的用户时,我有与我的User.id关联的文件,并且有一个条件,即associatedModel是User与许多模型关联的cakephp模型,cakephp,database-design,Cakephp,Database Design,我正在使用CakePHP2.4,我需要一个名为文件的模型来存储用户、案例和卡车的文件信息。现在,文件可以与许多其他模型(用户、案例、卡车等)关联。换句话说,我希望用户拥有文件,案例拥有文件,卡车拥有文件 我是否需要创建UserFiles模型、CaseFiles模型和TruckFiles,或者我是否可以有一个表条目,在文件中标记它是用户记录、案例记录或卡车记录?我也希望对注释和任务执行相同的操作,因此可能会有UserNotes、CaseNotes和TruckNotes,或者我可以有注释(id、fo
我想我需要创建userfile、UserNotes和UserTasks。但是,如果有一个好的设计和更好的方法,我愿意接受建议。您需要创建这些模型
- 使用者
- 文件
- 案例
- 卡车
例如:User hasMany File、Case hasMany File、Truck hasMany File、File belongsTo User、Case and Truck考虑这种关系的一种方式是:一对多(hasMany)、多对一(belongsTo)、一对一(hasOne)或多对多(hasandblongstomy)。在前面提到的三个模型中,您可以将外键存储在其中一个模型中,因为至少有一个关联的模型只与另一个表中的一个条目关联。在多对多关系中,需要一个联接表来存储表示关联的外键对
在本例中,如果您谈论的是一个可以属于多个用户的文件,并且用户可以有多个文件,那么这是一个多对多关系或HasandBelongToMany关系,然后是的,您需要一个UsersFile联接表。但是,如果一个文件只能属于一个用户,或者一个用户只能有一个文件,那么您谈论的是其他关系之一,而不需要联接表。对于文件/案例和文件/卡车也是如此。CakePHP已经有了一个名为File的类。见: 为此,最好使用其他名称,例如Attach
User hasMany Attach
Case hasMany Attach
Truck hasMany Attach
在这种情况下,我宁愿创建一个model_name和model_id字段作为外键,而不是在“attaches”表上创建三个外键(如user_id、case_id和truck_id)
架构表附加:
- id
- model_name
- model_id
- ...
型号附件:
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'model_id',
'conditions' => array('Attach.model_name' => 'User'),
),
'Case' => array(
'className' => 'Case',
'foreignKey' => 'model_id',
'conditions' => array('Attach.model_name' => 'Case'),
),
'Truck' => array(
'className' => 'Truck',
'foreignKey' => 'model_id',
'conditions' => array('Attach.model_name' => 'Truck'),
),
);
型号用户、箱子、卡车:
public $hasMany = array(
'Attach' => array(
'className' => 'Attach',
'foreignKey' => 'model_id',
'dependent' => true,
'conditions' => array('Attach.model_name' => 'User'), // Change the condition on Case and Truck model
),
);
很好,这是我认为可以做到的,但我不知道这是否是首选的CakePHP方式。