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

Laravel 5.8 后台表格渲染报Invalid argument supplied for foreach()错误

错误原因

  • ambilData方法中where条件使用单引号包裹$nama变量,单引号内的变量不会被PHP解析,实际执行的是查询nama字段等于字符串$nama的记录,大概率查询不到数据返回null
  • 你调用了first()方法执行查询,该方法只会返回单个模型实例或者null,不属于可遍历的数组/集合类型,而foreach语法要求传入的参数必须是可遍历结构,所以直接触发无效参数报错
  • 额外隐患:你的POST表单没有添加Laravel要求的CSRF令牌,后续提交会直接触发419页面过期错误

解决方案

方案1:你需要查询单条管理员数据(符合你现有first()的查询逻辑)

  1. 修正ambilData方法的语法错误,查询不到数据时返回空模型避免后续取值报错:
public function ambilData($nama){
    return data::orderby('userid')->where('nama', $nama)->first() ?? new data();
}
  1. 去掉Blade模板中的@foreach和@endforeach标记,所有模板中的$rows变量替换为$datalama即可,比如:
<tr>
    <td>ID : </td>
    <td>{{ $datalama->userid }}</td>
    <td>Nama : </td>
    <td>{{ $datalama->nama }}</td>
</tr>

方案2:你需要查询多条符合条件的管理员数据

  1. 修正ambilData方法,将first()替换为get()返回集合,同时修复where条件的变量解析问题:
public function ambilData($nama){
    return data::orderby('userid')->where('nama', $nama)->get();
}
  1. 优化Blade模板的遍历逻辑,增加空数据判断避免无匹配数据时触发报错:
<table border="1">
    @forelse($datalama as $rows)
    <!-- 你原有表格代码 -->
    @empty
    <tr>
        <td colspan="30">暂无匹配的管理员数据</td>
    </tr>
    @endforelse
</table>

通用修复:给表单添加CSRF令牌

在form标签内添加@csrf标记即可:

<form method="post" action="post_namaadmin">
    @csrf
    <input type="text" name="txtnamaadmin" id="txtnamadmin" value="1">
    <input type="submit" name="btnnamadmin" id="btnamaadmin">
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:09:04