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

Laravel视图中解析JSON时json_decode无法正常工作的问题

问题原因分析
  1. 控制器代码错误:
    • json_decode($orders)完全无效:$orders是Eloquent集合对象,并非JSON字符串,无法直接解码。
    • compact('orders', json_decode($orders))用法错误:compact()仅接受变量名字符串,第二个参数不是合法变量名,导致解码后的内容根本没传递到视图。
  2. 视图访问路径错误:
    • $order->name不存在,name字段存储在order_details这个JSON字段里,直接访问模型的name属性会返回null,因此无输出。
  3. 可选:字段获取限制:
    • get('order_details')仅查询order_details字段,若后续需要模型其他属性会受影响,除非确实只需要该字段。
解决方案

方案一:模型添加访问器(推荐)

在Processing模型中添加访问器,自动将order_details字段解码为对象:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Processing extends Model
{
    // ... 其他模型代码

    public function getOrderDetailsAttribute($value)
    {
        // 解码为对象,若要数组则用json_decode($value, true)
        return json_decode($value);
    }
}

修正控制器代码:

public function getOrderHistory(){
    $orders = Processing::where('client_id', auth()->user()->id)->get();
    // 若只需要order_details字段,可改为get(['id', 'order_details']),保留必要字段
    return view('pages.purchase', compact('orders'));
}

修改视图,正确访问JSON内的字段:

@foreach ($orders as $order)
 <h5 class="mt-0 font-weight-bold mb-2">{{ $order->order_details->name }}</h5>
 <p class="font-italic text-muted mb-0 small">Accepted</p>
 <div class="d-flex align-items-center justify-content-between mt-1">
 <h6 class="font-weight-bold my-2">Price: $100</h6>
  </div>
@endforeach

方案二:控制器内手动处理

如果不想修改模型,可在控制器中直接处理集合:

public function getOrderHistory(){
    $orders = Processing::where('client_id', auth()->user()->id)->get()
        ->map(function($item) {
            // 将order_details解码后添加到模型属性
            $item->order_data = json_decode($item->order_details);
            return $item;
        });

    return view('pages.purchase', compact('orders'));
}

视图中对应改为:

{{ $order->order_data->name }}

方案三:使用Laravel的JSON字段类型(Laravel 5.6+)

如果你的Laravel版本支持,可在模型中定义$casts属性,自动转换JSON字段:

class Processing extends Model
{
    protected $casts = [
        'order_details' => 'object', // 或 'array'
    ];
}

用法和方案一一致,无需手动写访问器,Laravel会自动处理解码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:09:28