我试图使用保存()更新到我的数据库中。由于我的主键是一个自动递增的id,当我试图使用save()时,它会创建一个新行。
我尝试使用保存($game_id,$newData)进行测试,但收到错误消息。
下面是我的代码:
表添加_游戏
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来更新它们。提前谢谢大家!
3条答案
按热度按时间2mbi3lxu1#
您需要定义一个主键,使
save()
能够用于更新。在您的示例中,该主键应该/必须是id
:保存()
这是insert()和update()方法的 Package 函数,根据是否找到与$primaryKey值匹配的数组键,自动处理记录的插入或更新:
由于您没有提到id,因此显然插入了一个新记录,但没有更新。
为了进行更新,您需要提供唯一的$primaryKey:
不需要重复最后一行(
$model->save($newData);
),这总是会引起麻烦/错误从CI 4.x文档:保存数据
这是一本了解底层SQL查询的重要读物,您可以在此处找到:INSERT ON DUPLICATE KEY UPDATE和https://mariadb.com/kb/en/insert-on-duplicate-key-update/以及许多其他
tjrkku2a2#
在Codeigniter 4
save()
中,方法可以根据您提供数据进行插入和更新在你的表中如果你想更新到add_gametable你只需添加你想更新的数据的id
2eafrhcq3#
我也解决了这个问题..如果你有custome 'id'名称,你必须定义它:
且必须在AllowedField中包含custom_id: