You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:05:05