CakePHP 2.1 hasAndBleongsToMany或hasMany通过?
我是CakePHP中hasAndBelongsToMany关系的新手。 我试图找出实施以下方案的最佳方法。 我是否使用hasAndBelongsToMany或hasMany?
在我的应用程序中,我正在创建维修订单。 维修订单有操作代码,分配给员工。 每个维修订单可以有多个操作代码。 所以,我可能会有类似于以下内容的东西:
RepairOrder1 - 由Employee1完成的OpCode1,由Employee2完成的OpCode2
根据我在手册中读到的内容,您不能使用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方法?
我想你会在这种情况下使用:
OpCode belongsTo RepairOrder
OpCode belongsTo Employee
RepairOrder hasMany OpCode
Employee hasMany OpCode
检索数据时,请使用CakePHP的Containable行为:
$this->RepairOrder->find('all',
'contain' => array(
'OpCode' => array(
'Employee'
)
)
);
链接地址: http://www.djcxy.com/p/64877.html