Codeigniter 4使用保存()更新到数据库中

axkjgtzd  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(178)

我试图使用保存()更新到我的数据库中。由于我的主键是一个自动递增的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来更新它们。提前谢谢大家!

2mbi3lxu

2mbi3lxu1#

您需要定义一个主键,使save()能够用于更新。在您的示例中,该主键应该/必须是id
保存()
这是insert()和update()方法的 Package 函数,根据是否找到与$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 UPDATEhttps://mariadb.com/kb/en/insert-on-duplicate-key-update/以及许多其他

tjrkku2a

tjrkku2a2#

在Codeigniter 4 save()中,方法可以根据您提供数据进行插入和更新
在你的表中如果你想更新到add_gametable你只需添加你想更新的数据的id

$newData = [
           'id' => 1 //add data id here
           '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);
2eafrhcq

2eafrhcq3#

我也解决了这个问题..如果你有custome 'id'名称,你必须定义它:

$primaryKey ="custom_id"
$useAutoIncrement = false

且必须在AllowedField中包含custom_id:

$allowedFelds = [
"custom_id",  // you must include it
"foo",
"bar"
]

相关问题