模型类中的代码点火器数据库调用


CodeIgniter Database call in Model-Class

我经常寻找这个问题!但没有什么真正有助于解决这个问题。

我总是收到以下错误:"致命错误:在非对象上调用成员函数 query()"

我有以下控制器:

<?php
class Station extends CI_Controller {
    function __construct($params=array()) {
        parent::__construct();
        session_start();
        $this->load->library('parser');
        $this->load->helper(array('form', 'url'));
    }
    public function index() {
        $this->tpl_data['location'] = $this->stationmodel->getLocations()->all;
        $_SESSION['location'] = $this->tpl_data['location'];

        $this->load->view('station', $this->tpl_data);
    }
}

?>

和以下模型:

<?php
class StationModel extends CI_Model {
    function __construct() {
        parent::__construct();
    }
    public function getLocations() {
        $query = $this->db->query("SELECT * FROM location WHERE City_IATA = 'MUC'");
        var_dump($query);
        // Just for test purposes!
        foreach($query->result() as $row) {
            echo $row->Location_Name_DE . '<br />';
        }
    }
}

?>

在我的自动加载中.php我加载了数据库模块:

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

同样,当我尝试直接在控制器中加载数据库模块时,我会收到相同的错误。

我的数据库.php:

$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '****';
$db['default']['database'] = 'comvel';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

有人可以帮助我吗?

提前感谢!

在控制器中尝试从function __construct($params=array())中删除$params=array()

我还会从您的模型中删除__construct() {},因为它不会做任何事情,可能会给您带来麻烦。

这是一个奇怪的问题。似乎你做的一切都是对的。

您是否尝试过完全删除构造函数?我的猜测是,您的构造函数以某种方式阻止了您的模型使用 db 对象初始化。如果需要运行一些初始化代码,使用钩子可能更合适,例如pre_controller钩子。