直到版本3才支持
您可以使复合主键工作,但这样做并不简单(总之,将其中一个字段作为primaryKey处理/指定,并使用回调处理另一个;需要覆盖Model::exists,为任何关联添加条件) – 如果是这样做可以更容易地为表添加一个唯一的密钥 – 这将允许正常使用和全面“它只是工作” – 性.
这是一种多态关联
知道你在问题中得到的是多态关联(位置属于PC,位置属于MO),而你可以将这两个字段视为他们真正表达关联的主键 – this behavior可能对你有用,它还包含使用可能与您的用例相关的条件定义模型关联的示例.
例如,基于问题中的信息,此架构将使用法更容易:
CREATE TABLE `positions` (
`id` int(11) unsigned NOT NULL auto_increment, //
`type` varchar(30) NOT NULL,
`foreign_id` int(11) unsigned NOT NULL, //
`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
)
);
}
本文探讨了如何在数据库设计中处理复合主键和多态关联。通过创建一个特殊的键结构,可以简化多态关联的管理,如在`positions`表中使用`foreign_id`和`type`作为联合索引来实现。同时,文章提到了在ORM模型中如何定义这样的关联,以确保数据操作的正常性和效率。示例代码展示了在PHP的CakePHP框架中如何设置一对一关联。

1730

被折叠的 条评论
为什么被折叠?



