在Codeigniter库中加载模型

时间:2010-04-06 16:38:53

标签: codeigniter model

我有这段代码:

class MY_Language extends CI_Language {

   function MY_Language()
   {
       parent::CI_Language();        

       $CI =& get_instance();

       $CI->load->model('language_model');

       $languages = $this->language_model->get_languages();

       print_r($languages);
   }

}

但我一直得到“致命错误:在第44行的C:\ xampp \ htdocs \ application \ libraries \ MY_Language.php中调用未定义的函数get_instance()”。有任何想法吗? 提前谢谢!

3 个答案:

答案 0 :(得分:4)

框架在CodeIgniter基础对象之前创建Language对象。因此,在代码中您将无法使用基础对象。实际上,还没有包含codeigniter / Base5.php文件。该文件定义了get_instance函数。这就是你得到这个特殊错误的原因。

如果你查看codeigniter / CodeIgniter.php文件,你会看到

$LANG =& load_class('Language');

出现在

之前
require(BASEPATH.'codeigniter/Base5'.EXT);

修改

根据您在下面的评论,我认为您应该能够获得数据库的实例,如下所示。这是从Loader类的数据库函数中挖掘出来的。

require_once BASEPATH.'database/DB'.EXT;
$db = DB('', false);

答案 1 :(得分:1)

Stephen Curran从库中加载模型的方法很难实现。您只需要从CI实例中获取已加载的模型。

$languages = $CI->language_model->get_languages();

但首先需要首先使用正常加载或自动加载来加载数据库类。

$this->load->database(); or $autoload['libraries'] = array('database');

如果你使用自动加载来加载你的实例,你应该按照正确的顺序排列它。

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

在库$CI->load->model('language_model')中加载了模型,您实际上已经在CI实例上附加了模型。您可以轻松地从CI实例中获取它。

答案 2 :(得分:0)

假设您的类存在于application / libraries文件夹中,即field_validation.php和模型中存在的其他类名,即Fields_model.php。

您需要执行以下步骤,在库中和库构造函数中创建公共对象名称$ ci,执行以下步骤。

  • 加载CodeIgniter全局对象($ CI =& get_instance())。

  • 您可以从CodeIgniter全局对象访问您的模型 ($ CI->负载>模型(' Fields_model&#39))。

  • 将CodeIgniter对象分配给 公共变量,你可以访问模型函数( $这 - > CI-> Fields_model-> applyValidation())。

  • 按照底部的示例进行操作。

     class FieldValidation {
    
              public $ci;
    
              public function __construct() {
                 $CI = & get_instance();
                 $CI->load->model('Fields_model');
                 $this->ci = $CI;
             }
    
            public function applyValidation(){
    
               $this->ci->Fields_model->applyValidation();
    
          }
        }