如何在 CakePHP 中强制插入?

How To Force Insert In CakePHP?

我有一个 MySQL 存档 table,其结构如下:

    `histories` 
      `uid` int(10) unsigned NOT NULL,
      `type` varchar(255) NOT NULL,
      `param` int(11) NOT NULL,
      `param2` varchar(255) NOT NULL,
      `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
     ENGINE=ARCHIVE DEFAULT CHARSET=latin1;

想要添加一个自动递增的“id”列。这个 table 的引擎是存档的,它完全符合我的需要,具有这种结构。

我希望这样保存:

$this->History->create();
$this->History->save(['uid' => uid, 'type' => 'deleted_entry', 'param' => $thing_id]);

但是 CakePHP 强制更新,这是我不想要的,而且 ARCHIVE 引擎也不支持。 Cake 似乎正在寻找 uid 的主键,找到它并决定它应该更新并且似乎没有可用于强制插入的标志。我不想求助于 $this->Model->query().

更新: 在 AppModel 中设置 $primaryKey = null$this->create(); 将插入。

class History extends AppModel {
    public $primaryKey = null;
}

如果您想在之后进行更新,只需:

$this->History->primaryKey = 'uid';save()

之前

您可以通过将模型的 $primaryKey 属性 设置为 null:

来告诉 Cake 2 您没有主键
$this->History->primaryKey = null;
$this->History->create();
$this->History->save(['uid' => uid, 'type' => 'deleted_entry', 'param' => $thing_id]);