gpt4 book ai didi

mysql - CakePHP 2 复合主键

转载 作者:可可西里 更新时间:2023-11-01 07:08:12 25 4
gpt4 key购买 nike

假设我有一个名为 positions 的表,我在其中保存每台计算机、显示器或打印机的坐标。

+-----------------+
| key | type | id |
+-----------------+
| 1 | PC | 1 |
| 2 | PC | 2 |
| 3 | MO | 1 |
+-----------------+

在这种情况下,type 和 id 是主键。我读到 Cake doesn't support composite primary keys 并建议为此使用直接查询。真的没有解决方法吗?将 PC 的坐标直接保存在 PC 表中还是保存在专门用于 PC 位置的表中更好?这很难下咽。

最佳答案

版本 3 之前不支持

Composite primary keys 在 CakePHP 版本 3 之前不受支持。

可以使复合主键工作,但这样做并非易事(总而言之,将其中一个字段视为/指定为主键并使用回调处理另​​一个;需要覆盖 Model::exists ,向任何关联添加条件)- 如果可能的话,向表中添加唯一键会更容易 - 这将允许正常使用和全面的“它只是工作”-ness。

这是一个多态关联

知道您在问题中得到的是一个多态关联(Position belongsTo PC,Position belongsTo MO),而您可以将这两个字段视为它们真正表达的主键association - this behavior 可能对您有用,它还包含使用可能与您的用例相关的条件定义模型关联的示例。

例如,根据问题中的信息,此模式将使使用更容易:

CREATE TABLE `positions` ( 
`id` int(11) unsigned NOT NULL auto_increment, // <- added
`type` varchar(30) NOT NULL,
`foreign_id` int(11) unsigned NOT NULL, // <- called "id" in the question
`key` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY (`foreign_id`, `type`)
);

这将是逆向模型关联的示例:

class Pc extends AppModel { 

public $hasOne = array(
'Position' => array(
'foreignKey' => 'foreign_id',
'conditions' => array('Position.type' => 'PC'),
'dependent' => true
)
);
}

关于mysql - CakePHP 2 复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com