CodeIgniter框架插入数据报错求助:Undefined property: Home::$Yes
解决CodeIgniter中"Undefined property: Home::$Yes"错误
作为CodeIgniter老玩家,这个错误我太熟了——本质是模型的命名、加载和调用没遵循框架规范,我一步步帮你捋清楚:
1. 先把模型的命名搞对
CodeIgniter对模型的命名有硬性要求,这是新手最容易踩的坑:
- 模型文件名必须首字母大写,比如存成
Yes.php(不是小写的yes.php) - 模型类名要和文件名完全一致,同样首字母大写,还要继承
CI_Model,示例代码如下:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Yes extends CI_Model { // 写你需要的插入数据方法 public function insert_record($data) { return $this->db->insert('你的表名', $data); } }
2. 确保模型在需要的方法里被加载
你现在只在index()方法里加载了模型,但savedata()是独立的请求方法(比如表单提交会指向它),这时候模型并没有被加载,自然找不到对应的属性。有两种解决方式:
方式一:全局加载(推荐)
在控制器的构造函数里加载模型和数据库,这样所有方法都能直接用:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Home extends CI_Controller{ public function __construct() { parent::__construct(); $this->load->database(); // 数据库也全局加载,不用每个方法重复写 $this->load->model('yes'); // 加载模型,这里用小写的模型名 } public function index() { // 你的首页逻辑 } public function savedata() { // 整理要插入的数据,比如从表单获取 $insert_data = [ '字段1' => $this->input->post('表单名1'), '字段2' => $this->input->post('表单名2') ]; // 调用模型的插入方法,注意是$this->yes(全小写) $this->yes->insert_record($insert_data); // 后续可以加跳转或成功提示 redirect('home/index'); } }
方式二:仅在savedata方法内加载
如果只有savedata()需要用这个模型,直接在方法里加载也可以:
public function savedata() { $this->load->database(); $this->load->model('yes'); // 后续的插入逻辑和上面一致 }
3. 调用模型时注意大小写!
当你用$this->load->model('yes')加载后,CodeIgniter会把模型实例化为$this->yes(全小写),而不是$this->Yes——这就是你报错的核心原因,一定要注意大小写匹配!
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

