CodeIgniter报错:Attempt to read property "status" on array 修复咨询
错误修复:Attempt to read property "status" on array
问题背景
我需要实现逻辑:当数据的status为active时,显示对应的数据行,但运行时出现错误提示:Attempt to read property "status" on array,相关代码如下:
模型代码
public function show_lowongan(){ return $this->db->get('lowongan'); }
控制器代码
public function lowongan() { $data['lowongan'] = $this->m_lowongan->show_lowongan()->result(); $this->load->view('lowongan', $data); }
原视图代码
<div class="row"> <?php if($lowongan->status == "draft"){?> <?php $no = 1; foreach($lowongan as $lowong){ ?> <div class="card" style="width: 18rem;"> <div class="card-body"> <h5><?php echo $lowong->title?></h5> <p><?php echo $lowong->lokasi?></p> <p><?php echo $lowong->created_at?></p> <p><?php echo $lowong->level_pekerja?></p> <p><?php echo $lowong->pengalaman_kerja?></p> <p><?php echo $lowong->pendidikan?></p> <p><?php echo $lowong->alamat?></p> <p><?php echo $lowong->no_wa?></p> <p><?php echo $lowong->no_telp?></p> <p><?php echo $lowong->min_gaji?></p> <p><?php echo $lowong->max_gaji?></p> <p><?php echo $lowong->job_desc?></p> <button><a href="<?php echo base_url('lowongan/detail/'.$lowong->id)?>">Detail Lowongan</a></button> <button><a href="<?php echo base_url('lowongan/edit/'.$lowong->id)?>">Edit Lowongan</a></button> <button><a href="<?php echo base_url('lowongan/delete/'.$lowong->id)?>">Hapus Lowongan</a></button> </div> </div> <?php }?> <?php }else{?> Sorry No Job Posting <?php }?> </div>
错误原因
- 控制器中
result()方法返回的是对象数组,视图里的$lowongan是数组而非单个对象,直接调用$lowongan->status会触发「在数组上读取对象属性」的错误。 - 原视图判断的是
draft状态,与需求的active状态逻辑不匹配。
修复方案
方案1:在视图中正确遍历并判断状态
修改视图代码,先遍历数组,再对每个数据对象判断status,同时处理无数据的场景:
<div class="row"> <?php $hasActiveJobs = false; foreach($lowongan as $lowong){ if($lowong->status == "active"){ $hasActiveJobs = true; ?> <div class="card" style="width: 18rem;"> <div class="card-body"> <h5><?php echo $lowong->title?></h5> <p><?php echo $lowong->lokasi?></p> <p><?php echo $lowong->created_at?></p> <p><?php echo $lowong->level_pekerja?></p> <p><?php echo $lowong->pengalaman_kerja?></p> <p><?php echo $lowong->pendidikan?></p> <p><?php echo $lowong->alamat?></p> <p><?php echo $lowong->no_wa?></p> <p><?php echo $lowong->no_telp?></p> <p><?php echo $lowong->min_gaji?></p> <p><?php echo $lowong->max_gaji?></p> <p><?php echo $lowong->job_desc?></p> <button><a href="<?php echo base_url('lowongan/detail/'.$lowong->id)?>">Detail Lowongan</a></button> <button><a href="<?php echo base_url('lowongan/edit/'.$lowong->id)?>">Edit Lowongan</a></button> <button><a href="<?php echo base_url('lowongan/delete/'.$lowong->id)?>">Hapus Lowongan</a></button> </div> </div> <?php } } if(!$hasActiveJobs){ ?> Sorry No Job Posting <?php }?> </div>
方案2:在模型/控制器层面提前过滤数据(更高效)
方法A:修改模型直接返回active状态数据
public function show_lowongan(){ return $this->db->where('status', 'active')->get('lowongan'); }
方法B:在控制器中过滤数据
public function lowongan() { $query = $this->m_lowongan->show_lowongan(); $allJobs = $query->result(); // 过滤出active状态的数据 $data['lowongan'] = array_filter($allJobs, function($item){ return $item->status == 'active'; }); $this->load->view('lowongan', $data); }
此时视图可简化为:
<div class="row"> <?php if(!empty($lowongan)){?> <?php foreach($lowongan as $lowong){?> <div class="card" style="width: 18rem;"> <!-- 内容同上 --> </div> <?php }?> <?php }else{?> Sorry No Job Posting <?php }?> </div>
内容的提问来源于stack exchange,提问作者Nicho
相关产品推荐
相关产品推荐

