【发布时间】:2010-12-18 01:00:31
【问题描述】:
我正在使用 codeigniter 1.7.3,并且我已设置并运行控制器,但是当我尝试通过控制器访问模型时,我无法返回查询结果。
我在配置区域中正确配置了我的数据库(我知道这一点,因为当我故意弄乱其中一个配置选项时,我收到一条消息说无法访问数据库。)
这是相关的控制器(SiteObj.php)代码:
class SiteObj extends Controller {
function __construct() {
parent::Controller();
$this->load->model('Site_model');
$data['query'] = $this->Site_model->create_site();
if ($data->num_rows() == 1) {
//etc. etc.
这里是相关的模型(site_model.php)代码:
class Site_model extends Model {
function __construct() {
parent::Model();
$this->load->database();
}
function create_site(){
$query = $this->db->query("SELECT * FROM sites WHERE siteid = '1' LIMIT 1");
if ($query->num_rows() > 0) {
$row = $query->row();
return $row;
// etc etc
我也尝试过命名初始函数 Site_model 而不是构造函数,但没有成功。我还尝试通过 autoload.php 文件自动加载数据库,还尝试在 create_site 函数本身而不是构造函数中加载数据库。
这是我收到的错误消息:
致命错误:在非对象上调用成员函数 num_rows() /www/development/sunrise_ci/00ci00/application/init/siteObj.php 在第 9 行
更新:我遵循了第一响应者的建议,但没有帮助。
我已经删除了所有对数据库连接的引用,以试图隔离问题。当我只是尝试从控制器中调用 create_site() 函数时,我得到了这个:
Undefined property: SiteObj::$Site_model
Fatal error: Call to a member function create_site() on a non-object
所以看来问题出在控制器和模型之间,不知何故,它们似乎并没有正确地相互“交谈”。有趣的是,我可以看到我可以将值从 create_site() 传递给控制器,但我仍然会收到错误消息。
**** 12/18 更新 **********
好的,首先,我修改了 application/config/hooks.php 文件,以便我可以在所有页面调用之前预加载我的初始化代码。所以这个页面有这个:
$hook['pre_controller'][] = array(
'class' => 'SiteObj',
'function' => '__construct',
'filename' => 'siteObj.php',
'filepath' => 'init'
);
接下来,我有一个处理所有页面调用的默认控制器。它位于 controllers/page.php,代码如下:
class Page extends Controller {
// I am the core controller for the application.
function _remap() {
$mysite = new SiteObj();
}
}
这会调用我在 application/init/siteobj.php 中设置的 init 对象。这是代码:
class SiteObj extends Controller {
function __construct() {
parent::Controller();
$this->load->model('Site_model');
$data = $this->Site_model->create_site();
if ($data){
$this->siteid = $data->siteid;
} else {
$this->siteid = 0;
}
}
}
最后是models/site_model.php中的模型代码:
class Site_model extends Model {
function Site_model() {
parent::Model();
$this->load->database();
}
public function create_site(){
// I load the site data from the database and send the result to the controller
$query = $this->db->query("SELECT * FROM sites WHERE siteid = '1' LIMIT 1");
if ($query->num_rows() == 1) {
return $query->row();
}
}
}
我收到此错误:
Undefined property: SiteObj::$Site_model
Fatal error: Call to a member function create_site() on a
non-object in
/www/development/sunrise_ci/00ci00/application/init/siteObj.php
on line 7
提前致谢!
加里
【问题讨论】:
标签: php codeigniter model controller