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

Blade模板内循环查询数组报错:syntax error, unexpected '<'

解决Blade模板@foreach循环的语法错误问题

这个错误的根源有两个,咱们一步步拆解清楚:

1. Blade指令内错误使用了输出语法{{}}

Blade的@foreach是控制结构指令,内部直接写PHP表达式即可,完全不需要用{{}}包裹——{{}}是用来把内容输出到页面的语法,把它放在@foreach的括号里会导致Blade解析时出现语法混乱,这就是你看到syntax error, unexpected '<'的核心原因。

2. 集合直接访问属性的逻辑错误

你写的\App\Post::where('qid',$updt_18_q->qid)->get()->body存在逻辑问题:get()方法返回的是Eloquent集合(也就是一堆Post模型的集合),集合本身并没有body属性,你需要遍历集合里的每个Post模型,再单独访问每个模型的body字段。


正确的模板写法(直接修复版)

把多余的{{}}去掉,直接传入查询返回的集合,然后在循环内访问单个模型的body:

@foreach(\App\Post::where('qid', $updt_18_q->qid)->get() as $updt_18_a)
    {{ $updt_18_a->body }}
@endforeach

更推荐的写法(遵循MVC规范)

实际开发中更建议在控制器里提前查询好数据,再传递到视图,避免在模板里直接写数据库查询逻辑,让职责更清晰:

// 你的控制器方法
$posts = \App\Post::where('qid', $updt_18_q->qid)->get();
return view('你的视图名称', compact('posts'));

然后在模板里循环使用:

@foreach($posts as $post)
    {{ $post->body }}
@endforeach

至于你说用first()能正常运行,是因为first()返回的是单个Post模型实例,直接访问body属性是有效的;而且如果是用{{\App\Post::where(...)->first()->body}},是输出单个模型的body内容,这时候{{}}的用法是正确的,但和@foreach的场景完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:52:11