在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,因此看起来模型没有正确构造。
我只能想象这是一个非常小的错误,但是我已经盯着它看了好几个小时,中间有几次休息,我只是看不到它。其他人可以帮助我吗?
答案 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 !!!