在Codeigniter模型中有一种方法可以使它工作吗?
class Mdl_my_model extends CI_Model
{
protected $my_db = NULL;
public function __construct()
{
parent::__construct();
$this->my_db = $this->load->database('my_db', TRUE);
}
public function some_cool_method()
{
$this->load->model('Mdl_other_model');
$this->Mdl_other_model->other_method();
}
}
下面的模型可以使用$ my_db对象,还是必须再次加载db?
class Mdl_other_model extends CI_Model
{
public function __construct()
{
parent::__construct();
}
public function other_method()
{
//is it possible to use the $my_db object here?
}
}
答案 0 :(得分:2)
您不必将数据库加载到类属性。您可以像模型$this->load->database('name')
一样简单地加载它。加载它时,它应该可以访问下面的所有内容。但是我通常只是在MY_Controller
的第一行__construct
中加载它,我将所有单独的控制器扩展到该行。
如果您尝试将不同的数据库名称分配给单个属性(这是您正在进行分配的唯一原因),则必须使您的其他模型扩展第一个,然后您才能访问该属性。但这意味着无论何时加载其他模型,您都必须先加载第一个模型。通常我也会将它们分配到MY_Controller
控制器中的公共属性,并且该变量将始终可用。