这只是我的第三个CakePHP应用程序,并且是第一个需要HABTM类型关联的应用程序。我正在使用Cake 2.1,其中HABTM参数发生了变化,允许通过将'unique'键设置为'keepExisting'来保存额外的信息。在一个正常的HABTM关联中,你有一个包含两个字段的表,每个外键。我想我需要一个3个外键。这可能通过使用'唯一'键,或者我应该使用hasMany通过关联?CakePHP hasAndBelongsToMany vs 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方法?
很酷,谢谢。有很多是通过它。 – Stewie 2012-04-27 17:30:47