2011-12-24 19 views
0

我创建一个新的模型类作为my_model.php/models文件夹内,并在其内部的函数来加载所有元素模型误差:

function get_all(){ 
    $query = $this->db->get('test'); //test is my table 
    return $query->result(); 
} 

在控制器中,我实例化的类和调用的方法;

$this->load->model('my_model'); 
$res = $this->my_model->get_all(); 

但是,这将引发我错误说:

Fatal error: Call to a member function get() on a non-object in /var/www/testapp/application/models/my_model.php on line 7

这条线7分的地方,我已经使用$this->db代码的部分。我试图看到$db的值,但我认为它是魔法访问器__get__set,所以在调用该方法之前我看不到此属性的值。

我试过Google搜索其他几个案例,但没有一个匹配我的场景,而没有一个能够解决我的问题。

回答

5

您必须加载数据库第一

$this->load->database(); 

因此,所有代码:

function get_all(){ 
    $this->load->database(); 
    $query = $this->db->get('test'); //test is my table 
    return $query->result(); 
} 

或者,加载数据库您__construct方法。

IMO,最好自动加载数据库,通过更改application/config/autoload.php,示例如下。

$autoload['libraries'] = array('database','form_validation'); //form_validation is for example only 
+1

如果是这种情况,那么错误就会是''undefined property'db'...“'或加载模型失败。 – 2011-12-24 16:57:50

+1

是的,现在我得到了线索,我没有做$ this-> load-> database()。我没有在codeigniter文档中的任何地方找到它。所以,它现在的作品,谢谢。 – Sandeep 2011-12-24 17:09:14

+0

@Madmartigan我不这么认为,PHP解释器在没有找到'get'后会退出,因为它是致命错误,不会提供'Notice'(如果db是一个未定义的属性)。 – Usman 2011-12-24 17:10:54

2

你的错误其实很简单:

return $query->result; 

应该是:

return $query->result(); 

有时由PHP错误报告的行号是不是正是你认为它是一个,解析器只是做的最好,并报告发现错误的地方。

还有一个问题:

$res = $this->my_model->getAll(); 

应该是:

$res = $this->my_model->get_all(); 

你叫由错误的名称自己的函数。

+0

实际上这些并不是错误的。我的代码一切正常,但这可能发生在赶时间发布。我仍然得到同样的错误。 而是在实际的代码中,我没有返回任何东西来检查,所以做了像$ this-> db-> get('test')之类的东西,并调用了这个方法,但它给了我错误。所以,我认为这个错误应该在这一行。 – Sandeep 2011-12-24 16:54:01

+1

我认为错误在这个'$ query = $ this-> db-> get('test');'。 – Usman 2011-12-24 16:56:09

+1

@疯狂-36:如果你在急匆匆地发帖,也许你正在编写匆忙。尽量减慢一点并注意。我们可以看到整个模型类和控制器方法代码吗? – 2011-12-24 17:00:46

3

在CodeIgniter中,您应该在使用它之前加载数据库模型。 使用$this->load->database();加载数据库模型。

+1

谢谢,这就是我所缺少的。 – Sandeep 2011-12-24 17:09:37