Laravel结合MongoDB如何正确获取并打印数组字段options
问题分析与解决方案
你遇到的问题根源在于options字段的结构:它是一个数组,每个元素都是只包含单个键值对的对象(比如第一个是{"A":"dfd"},第二个是{"B":"fdf"}),并不是每个对象都有A这个属性。所以当你循环到第二个或第三个option时,尝试访问$option->A就会报错——因为这些对象根本没有A属性,自然会抛出“Trying to get property 'A' of non-object”的错误。
正确的实现方式
方式1:灵活遍历所有选项(推荐)
不管选项的键是A/B/C还是其他,直接遍历每个option的键和值,这样扩展性更好,后续新增选项也不用修改代码:
<td> @foreach($question->options as $option) {{-- 遍历单个option对象里的键值对 --}} @foreach($option as $optionKey => $optionValue) {{ $optionKey }}: {{ $optionValue }}<br> @endforeach @endforeach </td>
这段代码会输出:
A: dfd B: fdf C: fdfdf
方式2:按指定键输出(适合固定选项的场景)
如果你确定选项只会是A/B/C,也可以逐个判断键是否存在后输出:
<td> @foreach($question->options as $option) @if(property_exists($option, 'A')) A: {{ $option->A }}<br> @endif @if(property_exists($option, 'B')) B: {{ $option->B }}<br> @endif @if(property_exists($option, 'C')) C: {{ $option->C }}<br> @endif @endforeach </td>
这种方式适合选项固定的场景,但如果后续新增选项(比如D),需要手动添加对应的判断逻辑。
额外小提示
注意到你文档里的answere拼写错误,正确的拼写应该是answer,虽然这不是当前问题的核心,但修正后能避免后续可能的混淆~
内容的提问来源于stack exchange,提问作者Amalendu Kar
相关产品推荐
相关产品推荐

