例如:我创建新模型,将id字段设置为1并保存。它运行正常,并将id = 1保存到数据库中。我打开MySQL控制台并删除表中的所有记录。当我删除它时,再次创建新模型并将id字段设置为1 - 它实际上将其保存为2作为id字段值。
我猜Yii从mysql获取当前的auto_increment值并覆盖我的id值。有没有办法防止这种行为?
编辑(我的代码示例):
$sn = new SaplingNode();
$sn->id = 1;
$sn->save();
我调用它两次,在调用之间我使用mysql控制台删除记录。就是这样。
答案 0 :(得分:2)
Yii框架无法做到这一点。作为MYSQL的默认行为。
您可以简单地执行此操作并在截断后重置自动增量ID。
ALTER TABLE tablename AUTO_INCREMENT = 1
答案 1 :(得分:1)
正如您目前正在使用它,答案是否定的,您不能这样做,而不是使用CActiveRecord。原因是Yii正在根据它的主键检索要更新的记录,并且不会覆盖它。覆盖主键的唯一方法是通过CDbCommandBuilder编写自己的更新查询。
BTW:在Yii论坛上有关于这个主题的an interesting discussion。
答案 2 :(得分:1)
这不是最佳做法,但如果你真的想在自动增量列上强行设置新记录的id,你可以这样做:
首先在您的rules()方法下将“SaplingNode”模型放在以下行中:
array('id', 'safe'),
然后使用您的代码以您喜欢的任何ID保存新记录,例如:
$sn = new SaplingNode();
$sn->id = 10;
$sn->save();
这段代码应该可以使用,我已经测试过了。
答案 3 :(得分:0)
答案 4 :(得分:0)
如果您只是测试并且可以从表中删除所有数据,则可以清空该表。例如,您可以使用phpMyAdmin,单击您的数据库以查看其表,找到您想要的表,然后单击该表行上的空显示。您将收到一条确认消息,其中包含启用或禁用FK的选项,单击“确定”将删除该表上的所有数据,并且在保存或插入新记录时,您的自动增量ID将从1开始。