codeigniter - Codeigniter 4 使用 save() 更新到数据库
问题描述
我尝试使用 save() 更新到我的数据库中。由于我的主键是一个自动增量 ID,因此当我尝试使用 save() 时它会创建一个新行。
我尝试使用 save($game_id, $newData) 进行测试,但收到错误消息。
下面是我的代码:
表 add_game
id | game_id | user_id | ign | acc_id
1 | 3 | 1 | ignA | accA
2 | 3 | 1 | ignB | accB
3 | 3 | 1 | ignC | accC
模型
protected $table = 'add_game';
protected $allowedFields = [
'user_id',
'game_id',
'ign',
'acc_id'
];
控制器
$newData = [
'user_id' => session()->get('user_id'),
'game_id' => $game_id,
'ign' => $this->request->getVar('ign'),
'acc_id' => $this->request->getVar('acc_id')
];
$model->save($newData); // currently it keeps creating new record
$model->save($newData); // return me error message
如何更新现有记录?我想根据我的 user_id 和 game_id 更新它们。提前谢谢各位!
解决方案
您需要定义一个主键才能进行save()
更新。在您的示例中,此主键应该/必须是id
:
节省()
这是对 insert() 和 update() 方法的封装,根据是否找到与 $primaryKey 值匹配的数组键,自动处理插入或更新记录:
由于您没有提及 id,因此显然插入了一条新记录并且未更新。
为了更新,您需要提供唯一的 $primaryKey:
// Performs an update on id=3, since the primary key, 'id', is found.
$newData = [
'id' => 3,
'user_id' => session()->get('user_id'),
'game_id' => $game_id,
'ign' => $this->request->getVar('ign'),
'acc_id' => $this->request->getVar('acc_id')
];
$model->save($newData);
无需重复最后一行 ( $model->save($newData);
),这总是会带来麻烦/错误
来自 CI 4.x 文档:保存数据
了解您在此处找到的基础 SQL 查询的重要读物:INSERT ON DUPLICATE KEY UPDATE和https://mariadb.com/kb/en/insert-on-duplicate-key-update/等等
推荐阅读
- wordpress - 如何在 Woocommerce 中更改 myadress.php
- sitecore - 以编程方式编辑 sitecore 项目的字段而不更新它的“更新”字段
- r - 根据条件求和或代入
- html - 如何在CSS中向右定位并使项目低于一个和另一个
- java - Java-Paradox 驱动程序 - 可以选择但不能修改
- python - 如果 elif 不起作用。我的代码有什么问题?
- php - 网站无法在 https 中运行,但在 http 中运行良好
- c# - 如何在 Outlook 插件中将自定义属性发送到接收方?
- c++ - 使用编码器/解码器逻辑门规则在 C++ 中编码/解码数据
- postgresql - Google SQL 实例之间的跨数据库查询 (PostgreSQL)