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
相关产品推荐
相关产品推荐

