1

这只是我的第三个 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 方法?

4

1 回答 1

3

我发现 HABTM 关系的唯一对象是标签和多个类别。

我使用的任何类型的会员、友谊或追随关系都有很多通过,因为有时将额外的数据附加到关系中会很好,即使它只是创建/修改的。让我对 HABTM 感到失望的另一件事是更新时替换所有内容的逻辑。导致很多麻烦保存模型的不同部分。

于 2012-04-27T15:41:27.440 回答