Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
活动记录设计模式[PHP/MySQL]_Php_Mysql - Fatal编程技术网

活动记录设计模式[PHP/MySQL]

活动记录设计模式[PHP/MySQL],php,mysql,Php,Mysql,我指的是张贴在这里的代码: 对于只有一个主键的表来说,这一切都很好。但是,对于具有两个主键的表(如复合表)又如何呢?上面链接中的设计模式如何解释这一点?如您所见,table.class.php中的load函数只接受一个id 对于表示复合表的类,我能想到的唯一一件事是扩展table类并重写load函数,用一个包含两个ID的函数替换它。但是,这看起来很混乱,我想知道是否有更整洁的方法来适应复合表的出现 非常感谢您对此事的意见 我建议扩展表的结构,使其具有另一列,这是主键。并将当前的两列设置为组合的

我指的是张贴在这里的代码:

对于只有一个主键的表来说,这一切都很好。但是,对于具有两个主键的表(如复合表)又如何呢?上面链接中的设计模式如何解释这一点?如您所见,table.class.php中的load函数只接受一个id

对于表示复合表的类,我能想到的唯一一件事是扩展table类并重写load函数,用一个包含两个ID的函数替换它。但是,这看起来很混乱,我想知道是否有更整洁的方法来适应复合表的出现


非常感谢您对此事的意见

我建议扩展表的结构,使其具有另一列,这是主键。并将当前的两列设置为组合的唯一键,这样您仍然可以确保数据是唯一的,但可以使用一个值作为主键调用它。

您不是指“两个主键”,而是指“包含两列的主键”。使用数组存储主键,每列由该数组中的一个元素表示。Yii框架就是这样工作的,您可能会发现它很有用(尽管它可能太复杂而无法开始)。我查看了Yii框架的实现,在createPkCriteria函数的注释中,它说“将数组用于多个主键”。这是一个错误吗?根据你所说的和我对这件事的研究,我了解到一个表只能有一个主键。我会将该注释解释为“在主键中使用多个值的数组”。啊……现在我明白了。非常感谢!这个Tobias的优点是什么?您不必扩展PHP代码,因为您可以使用一个主键值,并且您的数据在当前设置主键的这两列上仍然是唯一的。