1

当我尝试编写和运行 Code Igniter 教程时,它会抛出这个错误:

Call to undefined method News_model::get_news() in application\controllers\news.php on line 21 

这是第 21 行

$data['news'] = $this->news_model->get_news($slug);

模型

<?php
class News_model extends CI_Model {
    public function __construct()
    {
        $this->load->database();
    }
    public function get_news($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query = $this ->db->get('news')
            return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
    }
    }
4

4 回答 4

3

如果您在控制器中使用您的模型 - 您必须编写此代码

$this->load->model('News_model');
$data['news'] = $this->News_model->get_news($slug);

并检查线

parent::__construct();

在您的控制器 __construct 方法中。(如果子定义了构造函数,PHP不会自动实例化父构造函数,除非子专门实例化父构造函数)

如果您从应用程序的另一端使用模型,则必须编写此代码

$CI = &get_instance();
$CI->load->model('News_model');
$data['news'] = $CI->News_model->get_news($slug);
于 2012-12-23T10:44:15.460 回答
0

在不发布更多代码的情况下,看起来这里有两件事要检查。

首先,您必须在模型中调用父构造函数。所以你的 News_model 构造函数应该是这样的:

function __construct()
{
  parent::__construct();
  $this->load->database();
}

其次,如果您在上面发布的第 21 行的代码是正确的,则模型名称必须与您的类名称匹配。所以第 21 行应该是:

$data['news'] = $this->News_model->get_news($slug);

请注意 News_model 中的大写“N”。

这是 yAnTar 所写但措辞不同的重要内容。希望你能理解其中任何一个。

于 2012-12-24T04:44:13.893 回答
0

似乎模型未加载。您必须在使用之前加载模型在控制器或自动加载数组中在控制器加载模型中使用

$this->load->model('model_name');

在你的情况下

$this->load->model('news_model');
于 2018-04-08T16:51:56.017 回答
0

这可能会帮助你

1.In your controller:-

    parent::__construct();
    $this->load->model('News_model ');
    $data['news'] = $this->news_model->get_news($slug);

 2.In Model:-
class News_model extends CI_Model {
public function __construct()
{
    $this->load->database();
}
public function get_news($slug)
{
    if ($slug)
    {
        $query = $this ->db->get('news')
        return $query->result_array();
    }

    $query = $this->db->get_where('news', array('slug' => $slug));
    return $query->row_array();
}
}
于 2015-11-30T09:43:21.133 回答