CakePHP hasAndBelongsToMany vs hasMany through

这只是我的第三个CakePHP应用程序,并且是第一个需要HABTM类型关联的应用程序。 我正在使用Cake 2.1,其中HABTM参数发生了变化,允许通过将'unique'键设置为'keepExisting'来保存额外的信息。 在一个正常的HABTM关联中,你有一个包含两个字段的表,每个外键。 我想我需要一个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方法?


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

我使用的任何类型的会员资格,友谊或跟随关系都有很多,因为有时将附加数据附加到关系上是很好的,即使它只是被创建/修改。 另一件让我不喜欢HABTM的东西是替代所有更新逻辑。 导致很多麻烦保存模型的不同部分。

链接地址: http://www.djcxy.com/p/64879.html

上一篇: CakePHP hasAndBelongsToMany vs hasMany through

下一篇: CakePHP 2.1 hasAndBleongsToMany or hasMany through?