首页 > 解决方案 > 更新方法在 Codeigniter 4 中不起作用

问题描述

我有一个包含一些网站配置的表。它的模型类如:

<?php

namespace App\Models;

use CodeIgniter\Model;

class WebsiteConfig extends Model
{
    protected $table = 'website_config';
    protected $id = 'id';
    protected $allowedFields = [
        'config_name', 'config_value', 'updated_date'
    ];
}

表格看起来: 表格截图

我想更新这张桌子上的“标题”。codeigniter 4 文档显示:

$data = [
    'title' => $title,
    'name'  => $name,
    'date'  => $date,
];

$builder->where('id', $id);
$builder->update($data);

但是,当我使用这种用法时,会发生错误。我的代码:

    class Home extends BaseController
    {
        public function index()
        {
            $websiteConfig = new WebsiteConfig();
            try {
                $websiteConfig
                    ->where('config_name', 'title')
                    ->update('test');
            } catch (\ReflectionException $e) {
            }
            exit;
        }
    }

和错误: 错误截图

当我使用带有 set('config_value','test') 函数的更新方法时,代码可以正常工作。但我想按照文档所示进行更新。我能做些什么?感谢您的帮助。

标签: phpcodeigniter

解决方案


文档中:

更新()

更新数据库中的现有记录。第一个参数是要更新的记录的 $primaryKey。一个关联的数据数组作为第二个参数传递到此方法中。数组的键必须与 $table 中的列名匹配...

这意味着调用...->update('test')会将字符串视为'test'主键,并且没有要更新的数据。

如果要基于另一个字段(不是主键)进行更新,则必须使用set()then update()(不带任何参数)。

此外,set()必须使用关联数组(字段 => 值对)或单独的键和值参数调用。


推荐阅读