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

Laravel Blade模板foreach循环结束后外部调用$item仍返回最后一条数据

问题原因

该现象是PHP原生foreach的固有特性,和Blade模板引擎的实现无关。
PHP中使用foreach ($遍历对象 as $循环变量)的写法时,循环结束后循环变量不会被自动销毁,会保留最后一次循环时被赋值的内容,你遇到的「循环外打印$item得到最后一条模型数据」就是这个特性导致的。

可以用原生PHP代码复现该问题:

<?php
$collection = [
    (object)['id' => 1, 'nom' => '选项1'],
    (object)['id' => 2, 'nom' => '选项2'],
    (object)['id' => 3, 'nom' => '选项3'],
];

foreach ($collection as $item) {
    echo $item->nom;
}

// 循环结束后打印$item,会输出id=3的对象
var_dump($item);

解决方法

  • 循环结束后手动销毁变量,在@endforeach之后添加一行@php unset($item); @endphp即可,之后再调用$item就会返回未定义状态,符合你的预期。
  • 尽量不要依赖循环作用域外的$item变量做业务逻辑判断,Laravel 5.3及以上版本的Blade提供了内置的$loop变量,可以满足绝大多数循环内的状态判断需求。
  • 如果你后续用到引用传递的foreach写法(形如foreach ($collection as &$item)),更要注意必须在循环结束后手动unset引用变量,否则后续对$item的赋值会直接修改原集合的最后一条数据,引发更隐蔽的业务bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:45:01