2012-07-30 35 views
0

我是新手用笨并努力学习污物在笨.. 我的网站控制器:codeigniter site_model严重性:通知错误此行有什么问题?

class Site extends CI_Controller 
{ 
    function index() 
    { 
     $data = array(); 
     if($query = $this->site_model->get_records()) 
     { 
      $data['records'] = $query; 
     } 
     $this->load->view('options_view', $data); 
    } 

而且我site_model是:

class Site_model extends CI_Model { 
    function __construct(){ 
     parent::__construct(); 
    } 


    function get_records() 
    { 
     $query = $this->db->get('data'); 
     return $query->result(); 
    } 

    function add_record($data) 
    { 
     $this->db->insert('data', $data); 
     return; 
    } 

    function update_record($data) 
    { 
     $this->db->where('id', 12); 
     $this->db->update('data', $data); 
    } 

    function delete_row() 
    { 
     $this->db->where('id', $this->uri->segment(3)); 
     $this->db->delete('data'); 
    } 

} 

我做了$自动加载[“库” ] = array('database'); 当我尝试检查网站,我得到错误:

Severity: Notice 

Message: Undefined property: Site::$site_model 

Filename: controllers/site.php 

Line Number: 9 

什么是错的代码?

+0

是的,它是在线9 – ytsejam 2012-07-30 21:13:09

回答

1

加载模型:

class Site extends CI_Controller 
{ 
    //you also need the constructor 
    function __construct(){ 
     parent::__construct(); 
     $this->load->model('Site_model'); 
    } 
    function index() 
    { 
     $data = array(); 
     //now you can use it 
     if($query = $this->site_model->get_records()) 
     { 
      $data['records'] = $query; 
     } 
     $this->load->view('options_view', $data); 
    } 
+0

它的工作表示感谢。科林的方法也适用。 – ytsejam 2012-07-30 21:21:33

1

您需要先载入site_model,然后才能访问它。您可以手动加载它是这样的:

function index() 
{ 
    // Load the model... 
    $this->load->model('site_model'); 

    $data = array(); 
    if($query = $this->site_model->get_records()) 
    { 
     $data['records'] = $query; 
    } 
    $this->load->view('options_view', $data); 
} 

如果你在你的类使用模型在一个以上的方法,您应该加载在类的构造函数的模型:

function __construct(){ 
    parent::__construct(); 
    // Load the model... 
    $this->load->model('site_model'); 
} 

另外,你可以autoload模型(通过config/autoload.php)如果你会需要它在整个应用程序:

/* 
| ------------------------------------------------------------------- 
| Auto-load Models 
| ------------------------------------------------------------------- 
| Prototype: 
| 
| $autoload['model'] = array('model1', 'model2'); 
| 
*/ 

$autoload['model'] = array('site_model'); 
+0

您的方法和radashk的方法工作..谢谢你。 – ytsejam 2012-07-30 21:21:59

+0

@ytsejam:不客气 - 我很高兴这很有帮助。 – 2012-07-30 21:23:37

0

我用两种方法解决了这个问题。 Colin和Radashk方法都可以工作。如果我使用Radashk方法,将函数写在最上面就足够了。如果我使用Colin的方法,我必须使用$this->load->model('site_model');来删除和创建每个方法。

其他选项是$autoload['model'] = array('site_model');

感谢您的答复。我希望。信息可能会帮助其他人

+0

如果您需要在整个应用程序中使用模型,请考虑自动加载模型。 – 2012-07-30 21:31:31

+0

嗯,它是真的$ autoload ['model'] = array('site_model'); ? – ytsejam 2012-07-30 21:39:51

+0

是的,这就是你如何自动加载模型。以与在构造函数中加载模型的方式相同的方式,您无需将其加载到每个单独的方法中,自动加载模型可让您不必在整个应用程序的多个位置加载模型(多个控制器等) – 2012-07-30 21:45:43

相关问题