与许多模型关联的cakephp模型

与许多模型关联的cakephp模型,cakephp,database-design,Cakephp,Database Design,我正在使用CakePHP2.4,我需要一个名为文件的模型来存储用户、案例和卡车的文件信息。现在,文件可以与许多其他模型(用户、案例、卡车等)关联。换句话说,我希望用户拥有文件,案例拥有文件,卡车拥有文件 我是否需要创建UserFiles模型、CaseFiles模型和TruckFiles,或者我是否可以有一个表条目,在文件中标记它是用户记录、案例记录或卡车记录?我也希望对注释和任务执行相同的操作,因此可能会有UserNotes、CaseNotes和TruckNotes,或者我可以有注释(id、fo

我正在使用CakePHP2.4,我需要一个名为文件的模型来存储用户、案例和卡车的文件信息。现在,文件可以与许多其他模型(用户、案例、卡车等)关联。换句话说,我希望用户拥有文件,案例拥有文件,卡车拥有文件

我是否需要创建UserFiles模型、CaseFiles模型和TruckFiles,或者我是否可以有一个表条目,在文件中标记它是用户记录、案例记录或卡车记录?我也希望对注释和任务执行相同的操作,因此可能会有UserNotes、CaseNotes和TruckNotes,或者我可以有注释(id、foreign_id、associatedModel(可能是Truck、User或Case)等等)。因此,当我创建我的用户时,我有与我的User.id关联的文件,并且有一个条件,即associatedModel是User


我想我需要创建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方式。