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

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>

错误原因

  1. 控制器中result()方法返回的是对象数组,视图里的$lowongan是数组而非单个对象,直接调用$lowongan->status会触发「在数组上读取对象属性」的错误。
  2. 原视图判断的是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:10:24