我已将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
如何解决此问题?
答案 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)){
的值。只能通过扩展或修改核心类来添加该吸气剂。