如何在 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]);
我有一个 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
:
$this->History->primaryKey = null;
$this->History->create();
$this->History->save(['uid' => uid, 'type' => 'deleted_entry', 'param' => $thing_id]);