You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CI4自定义数据库连接失效:调用模型时仍使用默认数据库

CodeIgniter4 模型未使用自定义数据库连接的解决方案

问题出在你的模型类重写了__construct方法,但没有调用父类的构造函数,导致传入的自定义数据库连接没有被模型正确初始化,所以模型依然使用默认数据库配置。

修复方法

方式1:修改模型构造函数,调用父类构造

把模型的构造函数改成这样,确保传入的数据库连接被父类处理:

namespace App\Models;

use CodeIgniter\Model;

class Users extends Model
{
    protected $table = 'users';
    protected $primaryKey = 'id';
    protected $allowedFields = []; // 建议填写实际允许操作的字段,比如['username', 'email']

    public function __construct($db = null)
    {
        parent::__construct($db); // 必须调用父类构造,传递数据库连接实例
        // 这里可以保留你的自定义初始化逻辑
    }
}

方式2:移除自定义构造函数(更推荐)

CI4模型支持直接通过类属性配置,不需要重写构造函数,直接定义属性即可:

namespace App\Models;

use CodeIgniter\Model;

class Users extends Model
{
    protected $table = 'users';
    protected $primaryKey = 'id';
    protected $allowedFields = []; // 根据业务需求填写字段
}

原理说明

CodeIgniter4的Model父类构造函数负责接收传入的数据库连接实例,并将其赋值给模型的$db属性。你之前重写构造函数但未调用parent::__construct(),导致这一逻辑被跳过,模型只能使用默认的数据库连接,所以会出现Table 'mydefaultdb.users' doesn't exist的错误——它在默认库mydefaultdb里找users表,而你的自定义库是mydatabase。

修改后,控制器里的代码不需要变动,实例化模型时传入的$db会被正确应用,模型会查询你指定的mydatabase库中的users表。

内容的提问来源于stack exchange,提问作者EVA Referencement

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:10:41