1

我是 codeigniter 的新手,也是 OOP 的 MVC 方法的新手,所以我已经接受了这样一个事实,即这是我犯的一个错误,不太可能是我自己的代码之外的问题。

我有一个控制器(Purchase_Order),它加载 2 个模型(Product_m 和 Supplier_m)+ 其他。

我已经构建了一个自定义 MY_Model,它需要 0 个参数并根据模型设置(table_name、primary_key 等)生成查询。

在我的本地实例(Wamp)中,它运行良好。一旦我上传到实时网络服务器(Linux),我就会收到以下错误;

Fatal error: Call to a member function result() on a non-object in (MY_Model.php on line 58).

我有另一个控制器(用户),它加载模型(User_m)并通过相同的 MY_Model 路由传递,并且可以在线和本地完美运行。

我只能假设我有范围问题或类似的问题,但我在过去的 48 小时里一直在沉迷于修复无济于事。

我真的希望有人能抽出时间在这个问题上启发我。

MY_型号

class MY_Model extends CI_Model {    
//Vars
protected $_table_name = '';
protected $_primary_key = 'id';
protected $_primary_filter = 'intval';
protected $_order_by = '';
public $_rules = array();
//protected $_timestamps = FALSE;

//Constructor
function __construct() {
    parent::__construct();
}



// GET
public function get($id = NULL, $single = FALSE) {

    if($id != NULL){
        $filter = $this->_primary_filter;
        $id = $filter($id);
        $this->db->where($this->_primary_key, $id);
        $method = 'row';
    }
    elseif($single == TRUE){
        $method = 'row';
    }
    else{
        $method = 'result';
    }

    if(!count($this->db->ar_orderby)){
        $this->db->order_by($this->_order_by);
    }

    //echo var_dump($this);
    return $this->db->get($this->_table_name)->$method();
    //die('<pre>'.print_r($this->db, true).'</pre>');
}

其他类已删除,因为它们不是问题的一部分。

4

2 回答 2

0

发生这种情况时,这意味着 codeigniter 无法在您的数据库表中找到字段(这在我身上发生过多次)。该解决方案理论上会创建缺少的字段。

为了解决这个错误,我使用了一个小解决方案:

 <?php

   public function test($op)
    {
        $this->db->where('op', $op);
        $result = $this->db->get('test');
        return ($result instanceof CI_DB_mysql_result) ? $result->result() : false;
    }

这里我们检查变量是否是 CI_DB_mysql_result 的实例。出现这个错误是因为方法没有返回这个类的实例!!!

对不起,我不说英语。:)

于 2014-03-11T15:32:53.810 回答
0

非常感谢所有人,但最终@rojoca 作为相关问题:Looks like $this->db->get($this->_table_name) is returning null. Do you have $db['default']['db_debug'] set to FALSE? It's possible you have some database connection error.这让我得到了答案;

我之前已经将实时 DBase 导出到本地实例以测试哪个工作正常,这让我天真地相信这不是问题所在。

我为实时站点使用了不同的数据库配置设置,它确实将 db_debug 设置为 FALSE。重新打开它很快发现我正在使用的 Web 服务器/服务已将表名强制为小写。我完全没有意识到这一点,我之前也从未听说过这种强制方法。

为我吸取的教训。再次感谢您在此问题上提供的所有帮助。这个答案的所有功劳都应该归功于@rojoca。谢谢你-该睡觉了:)

于 2013-10-01T10:49:17.807 回答