如何在CakePHP中强制插入?

时间:2018-05-23 13:21:06

标签: cakephp cakephp-2.0 cakephp-2.9

我有一个MySQL归档表,其结构如下:

    `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”列。这个表的引擎是归档的,它完全符合我的需要,具有这种结构。

我希望像这样保存:

$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()

1 个答案:

答案 0 :(得分:1)

您可以通过将模型的$primaryKey属性设置为null来告诉Cake 2您没有主键:

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