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

CodeIgniter循环查询商品仅显示最后一条结果的问题排查

问题根因

  • 控制器foreach循环内的赋值逻辑错误:每次循环直接覆盖$data['featured']变量,最终只会保留最后一次循环查询到的商品数据,所以只能显示1条。
  • 额外可优化点:循环中多次调用SQL查询会造成不必要的数据库性能开销,更推荐用关联查询一次性获取所有需要的数据。

附加注意:你描述中商品全量表名为products,但原代码featured方法中写的是$this->db->from('product'),请确认和实际表名一致,避免出现查询空结果的问题。


修复方案

方案1:快速修正原有逻辑(不改变模型代码)

只需修改控制器的赋值逻辑,改为往数组追加元素而非覆盖变量:

public function index()
{
    $selectfeatured = $this->product->selectfeatured();
    // 先初始化存储精选商品的数组
    $data['featured'] = [];
    foreach ($selectfeatured as $val) {
        $id = $val->pid;
        // 用[]追加元素,避免覆盖
        $data['featured'][] = $this->product->featured($id);
    }
    $this->load->view('home', $data);
}

方案2:优化为关联查询(性能更高,推荐)

直接在模型中编写关联查询方法,一次查询获取所有精选商品,避免循环查库:

  1. 模型新增方法:
function get_featured_products()
{
    $this->db->select('p.*');
    $this->db->from('featured f');
    // 关联商品表,关联条件为精选表的pid对应商品表的id
    $this->db->join('product p', 'f.pid = p.id');
    $this->db->order_by("f.id", "desc");
    $this->db->limit(4);
    $query = $this->db->get();
    return $query->result();
}
  1. 控制器直接调用,无需循环:
public function index()
{
    $data['featured'] = $this->product->get_featured_products();
    $this->load->view('home', $data);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:01