Codeigniter访问另一个模型中的DB对象

Codeigniter访问另一个模型中的DB对象,codeigniter,Codeigniter,在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_m

在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?
}
}

您不必将数据库加载到类属性中。您可以像加载模型一样简单地加载它。
$this->load->database('name')
。当您加载它时,它应该可以访问下面的所有内容。但是,我通常只将其加载到
我的\u控制器
\u构造
的第一行,我将所有单独的控制器扩展到该行


如果您试图将不同的数据库名称分配给各个属性(这是您这样分配数据库名称的唯一原因),则必须先让其他模型扩展数据库名称,然后才能访问该属性。但这意味着,无论何时加载另一个模型,都必须先加载第一个模型。通常,我也会将它们分配到
MY_Controller
Controller中的公共属性中,并且变量将始终可用

不必将数据库加载到类属性中。您可以像加载模型一样简单地加载它。
$this->load->database('name')
。当您加载它时,它应该可以访问下面的所有内容。但是,我通常只将其加载到
我的\u控制器
\u构造
的第一行,我将所有单独的控制器扩展到该行


如果您试图将不同的数据库名称分配给各个属性(这是您这样分配数据库名称的唯一原因),则必须先让其他模型扩展数据库名称,然后才能访问该属性。但这意味着,无论何时加载另一个模型,都必须先加载第一个模型。通常,我也会将它们分配到
MY_Controller
Controller中的公共属性中,并且变量将始终可用

我还将在同一个类中使用默认数据库,因此我将无法使用
$this->load->database('name')
。我应该说清楚的。因此,我需要
$this->load->database()
$my_db=$this->load->database('my_db')在同一型号中。同样使用$my_db的模型都将由第一个模型加载,因此您关于扩展的第二个建议可能有效。谢谢@TomVaughan但就我个人而言,我认为最好单独加载它们,而不是扩展。这样,如果您只需要一个模型,就不必一个接一个地加载这两个模型。这就是说,如果您经常使用第二个连接(多于几个型号),那么使用
MY_Controller
路线可能是一个好主意。在codeigniter中,继承有点像PITA。我正在从事的项目是将quickbooks同步到db,因此在单个会话中,quickbooks和服务器之间可能会有大量的请求往返。我有一个主模型和许多其他模型,这些模型可以同步客户、发票等。在这个特定的用例中,扩展主模型加载的所有模型最有意义。我已经对它进行了编码,效果很好。我还将在同一个类中使用默认数据库,因此我将无法使用
$this->load->database('name')
。我应该说清楚的。因此,我需要
$this->load->database()
$my_db=$this->load->database('my_db')在同一型号中。同样使用$my_db的模型都将由第一个模型加载,因此您关于扩展的第二个建议可能有效。谢谢@TomVaughan但就我个人而言,我认为最好单独加载它们,而不是扩展。这样,如果您只需要一个模型,就不必一个接一个地加载这两个模型。这就是说,如果您经常使用第二个连接(多于几个型号),那么使用
MY_Controller
路线可能是一个好主意。在codeigniter中,继承有点像PITA。我正在从事的项目是将quickbooks同步到db,因此在单个会话中,quickbooks和服务器之间可能会有大量的请求往返。我有一个主模型和许多其他模型,这些模型可以同步客户、发票等。在这个特定的用例中,扩展主模型加载的所有模型最有意义。我已经对它进行了编码,效果很好。如果您特别想加载多个数据库,并且其中一个数据库已经是通过
$this->db
可以访问的默认数据库,那么您可以通过setter注入连接。如果您特别想加载多个数据库,并且其中一个数据库已经是通过
$this->db
可以访问的默认数据库,那么您可以通过setter注入连接。