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
相关产品推荐
相关产品推荐

