首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 2复合主键

CakePHP 2复合主键
EN

Stack Overflow用户
提问于 2014-03-05 08:44:19
回答 1查看 4.9K关注 0票数 7

假设我有一个名为“位置”的表,在该表中,我保存每台计算机、监视器或打印机的坐标。

代码语言:javascript
复制
+-----------------+
| key | type | id |
+-----------------+
| 1   | PC   | 1  |
| 2   | PC   | 2  |
| 3   | MO   | 1  |
+-----------------+

在这种情况下,类型和id是主键。我读过Cake不支持复合主键,并建议使用直接查询。真的没有解决办法吗?将PC机的坐标直接保存在PC表中,还是保存在表中更好,特别是PC位置?很难下咽。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 09:04:26

直到第3版才支持

直到复合主键版本3才支持CakePHP。

您可以让复合主键正常工作,但这样做并不容易(总之,将其中一个字段视为primaryKey,并使用回调处理另一个字段;需要覆盖模式::存在,向任何关联添加条件)--如果可以的话,向表中添加一个唯一键就更容易了--这将允许正常使用和全面“它只起作用”-ness。

这是一个多态关联

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

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

代码语言:javascript
复制
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`)
);

这将是逆模型关联的一个例子:

代码语言:javascript
复制
class Pc extends AppModel { 

    public $hasOne = array( 
        'Position' => array( 
            'foreignKey' => 'foreign_id',
            'conditions' => array('Position.type' => 'PC'), 
            'dependent' => true 
        ) 
    ); 
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22192601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档