这只是我的第三个 CakePHP 应用程序,也是第一个需要 HABTM 类型关联的应用程序。我正在使用 Cake 2.1,其中对 HABTM 参数进行了更改,允许通过将“唯一”键设置为“keepExisting”来保存额外信息。在正常的 HABTM 关联中,您有一个包含 2 个字段的表,每个字段都是外键。我想我需要一个有 3 个外键的。是否可以通过使用“唯一”键,或者我应该通过关联使用 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
);
操作码本质上是一个项目列表及其成本。
维修订单可以有多个操作码。我还需要跟踪每个维修订单上分配给特定操作代码的员工。所以我认为这需要另一个表,例如:
/* repair_order_assignments */
CREATE TABLE repair_order_assignments (
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 方法?