CodeIgniter3调用groupBy()报错:未定义方法CI_DB_mysqli_driver::groupBy()
问题解决:Call to undefined method CI_DB_mysqli_driver::groupBy()
错误原因
- 方法名不匹配:CodeIgniter 3的数据库查询构造器中,分组查询的方法是
group_by()(小写加下划线格式),你使用了驼峰式的groupBy(),这是CodeIgniter 4的写法,因此触发“未定义方法”的错误。 - 重复的FROM子句:模型代码里重复调用了
$this->db->from('quiz_table');,这会生成语法错误的SQL语句,即便修复分组方法,后续也会出现问题。
修正后的模型代码
function getSingleQuizQuestionDataFromDB($quizId) { try { $this->db->select([ 'quiz_table.quizName', 'quiz_table.creatorName', 'quiz_table.rating', 'question_table.questionId', 'question_table.questionTitle', 'question_table.correctAnswer', 'answer_table.answer' ]); $this->db->from('quiz_table'); $this->db->where('quiz_table.quizId', $quizId); $this->db->join('question_table', 'question_table.quizId = quiz_table.quizId', 'INNER'); $this->db->join('answer_table', 'answer_table.questionId = question_table.questionId', 'INNER'); // 替换为CodeIgniter3兼容的分组方法 $this->db->group_by(['quiz_table.quizId', 'question_table.questionId']); $result = $this->db->get(); $singleQuizQuestionData = $result->result_array(); return $singleQuizQuestionData; } catch (Exception $e) { log_message('error', $e->getMessage()); return []; } }
关键修改点
- 将
groupBy()替换为group_by(),贴合CodeIgniter 3的API规范。 - 删除重复的
$this->db->from('quiz_table');调用,避免SQL语法错误。 - 把多个分散的
select()调用合并为数组形式,代码更简洁易维护。 - 修复日志语句格式错误,原代码的日志级别参数格式不正确,调整为符合框架要求的写法。
内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe
相关产品推荐
相关产品推荐

