在 Laravel 中操作 JSON 数据非常直接,因为 Laravel 提供了对 JSON 处理的良好支持。以下是几个常见的操作 JSON 数据的示例,包括从数据库获取 JSON 字段、修改 JSON 字段以及保存回数据库等场景。

1. 从数据库获取 JSON 字段并操作

假设你有一个 settings 表,其中有一个 preferences 字段存储了 JSON 格式的数据,如 {"theme": "dark", "notifications": true}

首先,你需要在你的模型中定义该 JSON 字段为可被 casts 的类型:

// app/Models/Setting.php
use Illuminate\Database\Eloquent\Model;

class Setting extends Model
{
    protected $casts = [
        'preferences' => 'array',
    ];
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

然后,你可以这样获取并操作 JSON 字段:

$setting = Setting::first(); // 获取第一条设置记录

// 访问 JSON 字段中的值
$theme = $setting->preferences['theme'];
$notifications = $setting->preferences['notifications'];

// 修改 JSON 字段的值
$setting->preferences['theme'] = 'light';
$setting->save(); // 保存更改回数据库
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
2. 在控制器中处理 JSON 请求体

如果你正在处理一个发送 JSON 数据的 HTTP 请求,可以这样获取请求中的 JSON 数据并进行操作:

use Illuminate\Http\Request;

public function update(Request $request)
{
    $requestData = $request->json()->all(); // 获取请求中的所有 JSON 数据

    // 修改数据示例
    if (isset($requestData['user']['name'])) {
        $requestData['user']['name'] = strtoupper($requestData['user']['name']);
    }

    // 假设你要将修改后的数据以 JSON 格式响应回去
    return response()->json(['message' => 'Data updated', 'data' => $requestData]);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
3. 创建并保存含有 JSON 字段的新记录
use App\Models\Setting;

$preferences = ['theme' => 'light', 'notifications' => false];

$setting = new Setting();
$setting->preferences = $preferences; // 直接赋值,由于模型中设置了 cast,会自动转换为 JSON 存储
$setting->save();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

以上示例展示了在 Laravel 中操作 JSON 数据的基本方法,包括读取、更新和保存含有 JSON 字段的数据库记录,以及处理 JSON 格式的 HTTP 请求。