调用CodeIgniter的from()重复指定同表时出现‘Not unique table/alias’错误
解决CodeIgniter 3中“Not unique table/alias”错误
错误原因
你的模型代码里重复执行了$this->db->from('quiz_table');,这会导致生成的SQL语句两次引用quiz_table但未指定别名,数据库无法区分同一个表的多次引用,因此抛出该错误。
修正后的代码
删除多余的那行$this->db->from('quiz_table');即可,以下是修正后的完整方法:
function getSingleQuizQuestionDataFromDB($quizId) { try { $this->db->select('quiz_table.quizName'); $this->db->select('quiz_table.creatorName'); $this->db->select('quiz_table.rating'); $this->db->select('question_table.questionId'); $this->db->select('question_table.questionTitle'); $this->db->select('question_table.correctAnswer'); $this->db->select('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'); $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 []; } }
额外优化建议
- 给表设置别名,让代码更简洁易读:
$this->db->select('q.quizName, q.creatorName, q.rating'); $this->db->select('qt.questionId, qt.questionTitle, qt.correctAnswer'); $this->db->select('a.answer'); $this->db->from('quiz_table q'); $this->db->where('q.quizId',$quizId); $this->db->join('question_table qt','qt.quizId = q.quizId','INNER'); $this->db->join('answer_table a','a.questionId= qt.questionId','INNER'); - 异常捕获中建议开启日志记录,方便后续排查问题;同时返回空数组而非
null,避免视图处理数据时出现报错。
内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe
相关产品推荐
相关产品推荐

