CodeIgniter:未定义的属性$ db

时间:2017-01-22 23:51:17

标签: php codeigniter-3

在CodeIgniter 3.1.3中,我在application / core / MY_Model.php中扩展了CI_Model:

class MY_Model extends CI_Model {

    public function __construct($id = NULL) {
        parent::__construct();
        $this->load($id);
    }

    public function load($id) {
        $this->db->where('id', $id);
        $this->db->limit(1);
        $query = $this->db->query($this->_table);
        if ($row = $query->result()) {
            // @todo Process results
        }
        // Free the resources.
        $query->free_result();
    }

}

我的User_model看起来像这样:

class User_model extends MY_Model {

    public function __construct($id = NULL) {
        parent::__construct($id);
    }

}

我还在application / core / MY_Controller中扩展了CI_Controller,如下所示:

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('User_model');
    }
}

我将application / config / autoload.php中的数据库连接自动加载为:

$autoload['libraries'] = array('database');

如果不在控制器中加载User_model,我就可以运行迁移,因此可以正确配置数据库连接。但当我添加$ this-> load-> model('User_model')时,我收到错误“Undefined property:User_model :: $ db”。

如果我让User_model扩展CI_Model它运行没有错误,并且主页控制器中的var_dump表明数据库已正确自动加载。但是只要我将MY_Model置于其间,数据库类在模型中是未定义的,并且模型中的$ this-> load也返回NULL,因此看起来模型没有正确构造。

我只能想象这是一个非常小的错误,但是我已经盯着它看了好几个小时,中间有几次休息,我只是看不到它。其他人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

从控制器,让我们说A_controller

$this->load->library('MyLib');

在MyLib中,我的原始问题是这个块

    $ci = &get_instance();
    $ci->load->model('my_model');

    $this->active_model = $ci->my_model;

然后奇迹来了

    $ci = &get_instance();
    $ci->load->model('my_model');
    $ci->my_model->db = & $ci->db;

    $this->basic_model = $ci->my_model;

当CI加载模型$ db属性时出现CI。 所以,当你在模型中调用$ this-> db时,这意味着你想要“my_model”拥有该属性,对吧? 我所做的只是将属性从CI链接到my_model !!!