我想在一个表中更改主键,但phalcon似乎没有提供任何方法来更改主键。
uid是此表中的主键
+ ---- + ------------ + ------------ + ------ +
| uid |名称|键入|年|
+ ---- + ------------ + ------------ + ------ +
| 1 | Robotina |机械| 1972年|
| 2 |阿童木|机械| 1952年|
| 3 |终结者|半机械人| 2029 |
+ ---- + ------------ + ------------ + ------ +
$tmp = User::findFirst('uid = 100');
$tmp->uid = 900;
$tmp->rate = 15;
$result = $tmp->save();
这些代码无法修改表中的任何内容,但它返回的$ result是 true ,这是一个错误吗? 我认为它应该提供一种修改主键的方法。
答案 0 :(得分:2)
我不认为这是一个错误,我怀疑Phalcon开发人员会赞同将主键作为不可变或一成不变的原则。请参阅以下问题:Can we update primary key values of a table?和https://softwareengineering.stackexchange.com/questions/8187/should-a-primary-key-be-immutable/
如果有任何错误,Phalcon可以让你首先更改主键。
知道为什么要更改主键可能有所帮助,因为我无法想到任何理由,为什么你会想要这样做。我认为主键的主要(唯一?)目的是识别表中的那一行,以及任何连接表,无论Robotina是否具有1,11或111的uid都不是真的重要,只要输入对于表中的所有行都是唯一的。
如果更改的目的是某种排名,例如排行榜,我建议添加排名字段,因为更改特殊主键字段可能会更有效。
如果您必须更改uid,我会倾向于创建一个新行并删除旧行,如果这听起来很麻烦,请记住,根据您使用的数据库,可能是数据库引擎是什么无论如何都要在幕后做,而且编辑主键的概念也会让很多人抓住它们的优势。