You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CodeIgniter中URL传递ID报错:Trying to get property of non-object

解决CodeIgniter中URL传递ID时的"Trying to get property of non-object"错误

咱们先拆解下这个错误的根源:你在视图里尝试访问$f->id,但$f根本不是对象——它只是一个字符串!

看你的模型代码,get_field()方法返回的是数据库表camera_details字段名数组(比如['id', 'model', 'price']这种),但你想要的明明是表中的具体记录数据,这样才能拿到每条记录的id来做编辑/删除操作呀。

接下来给你一步步修正的方案:

1. 重写模型方法:获取表的所有记录

把模型里的get_field()改成获取所有相机数据的方法,比如命名为get_all_cameras()

function get_all_cameras(){
    // 查询camera_details表的所有记录
    $query = $this->db->get('camera_details');
    // 返回对象数组(如果偏好数组格式可以用result_array())
    return $query->result();
}

2. 更新控制器:调用新的模型方法

修改控制器的cameralist()方法,让它获取记录数据并传给视图:

function cameralist(){ 
    $this->load->model('p_model'); 
    // 获取所有相机记录,赋值给data['cameras']
    $data['cameras'] = $this->p_model->get_all_cameras(); 
    $this->load->view('cameralist',$data); 
}

3. 修正视图:遍历记录对象并展示内容

现在视图里拿到的是包含每条相机记录的对象数组,你可以遍历这些对象,展示字段内容并生成正确的编辑/删除链接:

<?php foreach($cameras as $camera): ?>
    <!-- 展示除id外的所有字段 -->
    <?php foreach(get_object_vars($camera) as $field_name => $field_value): ?>
        <?php if($field_name != 'id'): ?>
            <div class="values"><?= $field_name . ": " . $field_value ?><br></div>
        <?php endif; ?>
    <?php endforeach; ?>
    
    <!-- 生成编辑和删除链接,这里用$camera->id拿到当前记录的ID -->
    <a href="<?= base_url('index.php/product/edit/' . $camera->id) ?>">Edit</a>
    <a href="<?= base_url('index.php/product/delete/' . $camera->id) ?>">Delete</a>
    
    <br><br><br>
<?php endforeach; ?>

额外小提示:

  • 如果你明确知道要展示哪些字段,直接写字段名会比遍历更清晰,比如<?= $camera->model ?><?= $camera->price ?>
  • 确保你的camera_details表确实存在id字段,不然还是会出现类似错误
  • CodeIgniter中base_url()支持直接拼接路径,写法更简洁,比如base_url('product/edit/' . $camera->id)(前提是你在config里正确配置了base_url)

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

火山引擎 最新活动