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

Laravel技术问题:如何在视图中正确显示数据库中的数组/字符串对象

解决Blade视图展示数据库中JSON数组的问题

嘿,我来帮你搞定这个Blade视图展示数组的问题!首先看你给出的代码,发现Model模型里有个小笔误——应该是$casts而不是$cat,这个是Laravel里用来做字段类型转换的关键属性,能自动把数据库里的JSON字符串转成PHP数组,这样后续处理就方便多了。

第一步:修正Model模型的类型转换

先把你的Model模型里的类型转换属性改对,这样从数据库取数据时,model字段会自动转成数组:

class Model extends Model {
    protected $fillable = ['model', 'prod_id'];
    // 修正为$casts,指定model字段为数组类型
    protected $casts = ['model' => 'array'];

    public function product() {
        // 这里方法名建议改成product,更符合关联关系语义(属于一个Product)
        return $this->belongsTo(Product::class, 'prod_id');
    }
}

第二步:控制器中获取关联数据

在控制器的方法里,通过关联查询拿到Product及其对应的Model数据:

public function show($id) {
    // 预加载关联的models,避免N+1查询问题
    $product = Product::with('models')->findOrFail($id);
    return view('products.show', compact('product'));
}

第三步:Blade视图中展示数组内容

现在在Blade视图里,你可以直接遍历每个Model的model数组(因为已经被自动转成PHP数组了):

<div class="product">
    <h2>{{ $product->name }}</h2>
    <h3>关联型号列表:</h3>
    <ul>
        @foreach($product->models as $modelItem)
            @foreach($modelItem->model as $item)
                <li>{{ $item }}</li>
            @endforeach
        @endforeach
    </ul>
</div>

如果你的需求是把每个model数组里的元素用逗号分隔展示,也可以这样写:

@foreach($product->models as $modelItem)
    <p>{{ implode(', ', $modelItem->model) }}</p>
@endforeach

这样就能正确把数据库里存的["item_1", "item_2"]格式数据,在Blade视图里展示成清晰的列表或者逗号分隔的文本啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:00