CakePHP hasAndBelongsToMany vs hasMany 通过
Posted
技术标签:
【中文标题】CakePHP hasAndBelongsToMany vs hasMany 通过【英文标题】:CakePHP hasAndBelongsToMany vs hasMany through 【发布时间】:2012-04-27 13:45:29 【问题描述】:这只是我的第三个 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 方法?
【问题讨论】:
【参考方案1】:我发现 HABTM 关系的唯一对象是标签和多个类别。
我使用的任何类型的会员、友谊或追随关系都有很多通过,因为有时将额外的数据附加到关系中会很好,即使它是刚刚创建/修改的。让我对 HABTM 感到失望的另一件事是更新时替换所有内容的逻辑。保存模型的不同部分会造成很多麻烦。
【讨论】:
以上是关于CakePHP hasAndBelongsToMany vs hasMany 通过的主要内容,如果未能解决你的问题,请参考以下文章
php [cakephp:mysqldump] mysqldumpのcakephp実装サンプル。#php #cakephp #mysql
使用 Cakephp-jwt-auth [CakePHP 3] 过期后颁发新令牌
从 cakephp 3.x 迁移到 cakephp 4.x [关闭]