升级后出现Codeigniter错误:未定义的属性:CI_DB_mysqli_driver :: $ ar_orderby

时间:2019-05-20 21:43:18

标签: codeigniter

我已将Codeigniter从2.1更新到2.2,然后更新到3,现在我运行它时出现此错误

Undefined property: CI_DB_mysqli_driver::$ar_orderby system\core\Model.php 73

这是 My_Model.php 中的代码:

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

我检查了this question并通过将上面的代码替换为这个代码来测试了答案

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

但是我得到这个错误

Undefined property: Home::$_order_by system\core\Model.php 73

我也尝试过

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

但是我得到了

Message: Undefined property: CI_DB_mysqli_driver::$ar_orderby
Filename: core/MY_Model.php
Line Number: 59

Message: Undefined property: Home::$orders
Filename: core/Model.php
Line Number: 73

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

是属性名称的更改导致此问题。从V3开始,活动记录(AR)更改为 Query Builder (QB)。伴随着这一更改,类属性的前缀从“ ar_”更改为“ qb _”。

不幸的是,AR属性$ar_orderby是公开的,并且同一属性$qb_orderby的QB版本受到保护,因此无法从MY_Model进行访问。

我不知道有一种简单的方法可以成功扩展CI_DB_query_builder,因为它是用来创建CI_DB类的。 (请参阅/system/database/DB.php的第182行),但是为了使$qb_orderby起作用,需要添加一个“ getter”函数来检索if(!count($this->db->qb_orderby)){的值。只能通过扩展或修改核心类来添加该吸气剂。