You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP新手求助:CodeIgniter中Trying to get property of non-object报错

解决 "Trying to get property 'sale_rate' of non-object" 报错问题

你遇到的这个报错,核心原因其实很直白:你的Model返回的是数组格式的查询结果,但你在Controller里却用对象访问的语法(->)去获取字段值,自然会触发这个错误啦。

问题根源拆解

先看你的Model代码:

function get_productDet($item) { 
    $this->db->select('*'); 
    $this->db->from('product'); 
    $this->db->where('id',$item); 
    $res=$this->db->get()->result_array(); // 这里返回的是二维数组
    return $res; 
}

result_array()方法会返回一个包裹着查询结果的二维数组——哪怕你根据id查询只会得到一条数据,它也会放在一个数组里返回。但你在Controller里却直接用$product_det->sale_rate这种对象访问的方式去取值,这就导致了"获取非对象属性"的报错。

两种可行解决方案

方案一:把Model返回改成对象格式

如果你更习惯用对象语法访问字段,只需要把Model里的result_array()改成row()就行(因为你是根据主键查询,必然只有一条数据,row()专门用来返回单条数据的对象):

function get_productDet($item) { 
    $this->db->select('*'); 
    $this->db->from('product'); 
    $this->db->where('id',$item); 
    $res=$this->db->get()->row(); // 返回单条数据的对象
    return $res; 
}

这样你Controller里原来的$product_det->sale_rate就能正常工作,不需要修改Controller的其他代码。

方案二:保持数组返回,修改Controller的取值方式

如果想继续用数组格式,那Controller里要调整成数组的访问语法,注意先取出数组里的第一条数据:

function product_det() { 
    $item=$this->input->post('item_id'); 
    $quantity=$this->input->post('quantity'); 
    $rate=$this->input->post('rate'); 
    $amount=""; 
    $cgst=""; 
    $sgst=""; 
    $igst=""; 
    $product_det=$this->sale_model->get_productDet($item); 
    if(!empty($product_det)) { 
        // 先取出数组里的第一条数据
        $product = $product_det[0];
        if($rate=="" || $rate==0) { 
            $rate=$product['sale_rate']; // 数组用[]访问字段
        } 
        $amount=$rate*$quantity; 
        $cgst_per=$product['CGST']; // 这里也要改成数组语法
        $sgst_per=$product['SGST']; 
        $igst=0; 
    } 
    echo $rate."-".$amount."-".$cgst."-".$sgst."-".$igst.""; 
}

另外提个小细节:你代码里的$cgst和$sgst变量只声明了但没赋值,最后输出会是空的,记得后续补上对应的计算逻辑哦。

额外小建议

  • 针对根据主键查询单条数据的场景,用row()返回对象比result_array()更合适,代码更简洁,也不容易出错。
  • 用row()的时候,可以在Controller里先判断$product_det是否为null,避免空对象报错,比如:
if($product_det !== null) {
    // 执行你的业务逻辑
}

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:46:18