CodeIgniter报错Call to undefined method MySQLi\Connection::select()如何解决
报错原因
\Config\Database::connect()返回的是数据库连接实例,而select()、from()、join()均为CodeIgniter查询构造器类的方法,连接实例本身不包含这些方法,直接调用就会触发未定义方法报错。- 你没有先初始化查询构造器对象,就直接用连接实例调用查询相关方法,是错误的核心原因。
解决方案
你需要先调用连接实例的 table() 方法获取查询构造器对象,再调用查询方法即可,修正后的Model层代码如下:
public function join() { $db = \Config\Database::connect(); $session = \Config\Services::session(); $id = $session->get('id'); // 先通过table()获取查询构造器,再链式调用所有查询方法 $query = $db->table('subject_tbl') ->select('subject_tbl.subject, mark_tbl.mark') ->join('mark_tbl', 'mark_tbl.sub_id = subject_tbl.sub_id') ->where('mark_tbl.id', $id) ->get(); // CI4中对应CI3的result()方法为getResult(),按需也可调用getResultArray()返回数组格式 return $query->getResult(); }
可选优化写法
如果你的自定义Model已经继承了框架的 CodeIgniter\Model 基类,还可以省略手动获取数据库连接的步骤,写法更简洁:
// 在Model类的属性中先声明对应操作的表名 protected $table = 'subject_tbl'; public function join() { $session = \Config\Services::session(); $id = $session->get('id'); return $this->builder() ->select('subject_tbl.subject, mark_tbl.mark') ->join('mark_tbl', 'mark_tbl.sub_id = subject_tbl.sub_id') ->where('mark_tbl.id', $id) ->get() ->getResult(); }
Controller层代码无需调整,修改Model层后即可正常运行。
内容的提问来源于stack exchange,提问作者Janu lakshmi
相关产品推荐
相关产品推荐

