Laravel Blade中动态调用已加载关联执行count()仅@dd正常问题
问题原因
Blade编译{{ }}包裹的内容时,会优先匹配大括号对,你写的{$type['name']}外层的花括号会被Blade提前识别,导致整个表达式被错误拆分,最终执行时无法正确读取到对应关联,返回null后调用count()就会抛出错误。@dd属于Blade专用指令,编译器会直接将指令包裹的内容原样转为原生PHP执行,不会触发花括号拆分逻辑,因此可以正常输出结果;直接写固定关联名时没有嵌套花括号,不会触发解析冲突,运行也正常。
解决方案
- 方案1:使用Eloquent原生
getAttribute方法获取动态关联,完全避开解析冲突{{ $parent_category->getAttribute($type['name'])->count() }} - 方案2:先将动态关联名赋值给临时变量,再调用关联
@php $relation = $type['name']; @endphp {{ $parent_category->$relation->count() }} - 方案3(性能优化推荐):预加载关联计数,不需要加载完整的关联集合
首先在查询分类的代码中添加withCount预加载计数:
模板中直接输出计数字段即可:$parent_category = Category::withCount($type['name'])->first();{{ $parent_category->getAttribute($type['name'].'_count') }}
内容的提问来源于stack exchange,提问作者Stroomschok
相关产品推荐
相关产品推荐

