我是 CakePHP 中 hasAndBelongsToMany 关系的新手。我试图找出实现以下场景的最佳方法。我使用 hasAndBelongsToMany 还是 hasMany through?
在我的应用程序中,我正在创建维修订单。维修订单具有分配给员工的操作码。每个维修订单可以有多个操作码。所以,我很可能会有类似于以下的内容:
RepairOrder1 - OpCode1 由 Employee1 完成,OpCode2 由 Employee2 完成
从我在手册中阅读的内容来看,您不能在这种情况下使用 HABTM 关系的原因是,在保存数据时,会首先删除原始信息。但是,在 2.1 中,您可以设置一个“唯一”键,让它首先保留现有信息。那么我是通过创建一个 HABTM 还是一个 hasMany 呢?
编辑
这是我的架构:
/* repair_orders */
CREATE TABLE repair_orders (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
number VARCHAR(16), //Auto-generated repair order number
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
/* Employees */
CREATE TABLE employees (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(16),
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
/* op_codes */
CREATE TABLE op_codes (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(16),
sale_material DECIMAL(10,2),
cost_material DECIMAL(10,2),
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
我正在尝试为维修订单分配多个操作代码,并跟踪哪个员工执行了该特定操作代码。所以我可以有一个带有 3 个操作码的维修订单,每个操作码都有不同的员工。所以我认为这需要另一个表,例如:
/* repair_order_assignments */
CREATE TABLE repair_order_assignments (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
repair_order_id INT(16),
op_code_id INT(16),
employee_id INT(16)
);
所以我的联想是:
Repair_Order_Assignment hasMany Employee, Op_Code
Employee belongsTo Repair_Order_Assignment
Op_Code belongsTo Repair_Order_Assignment
Repair_Order_Assignment hasAndBelongsToMany Repair_Order
Repair_Order hasAndBelongsToMany Repair_Order_Assignment
然后按照手册,当hasAndBelongsToMany关联保存时,先删除关联。您将丢失列中的额外数据,因为它不会在新插入中被替换。然而,它继续注意到在 2.1 中有一个可以设置的唯一变量来保存额外的数据。此设置将与唯一键一起使用还是我应该使用 hasMany through 方法?