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

Laravel中无法向JSON数组添加元素的问题求助

给Laravel模型的JSON字段添加新元素

问题场景

需要将存储在JSON字段中的数据:

{"1":"One","2":"Two","3":"Three"}

更新为:

{"1":"One","2":"Two","3":"Three","4":"four","5":"five"}

已有的表结构定义:

Schema::create('items', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->json('data')->nullable();
    $table->timestamps();
});

模型代码:

class Item extends Model
{
    protected $fillable = [
        'title', 'data'
    ];

    protected function data(): Attribute
    {
        return Attribute::make(
            get: fn ($value) => json_decode($value, true),
            set: fn ($value) => json_encode($value),
        );
    }
}

控制器已完成初始数据创建,但不知道如何给data字段添加新元素:

public function index()
{
    $input = [
        'title' => 'Demo Title',
        'data' => [
            '1' => 'One',
            '2' => 'Two',
            '3' => 'Three'
        ]
    ];

    $item = Item::create($input);

    dd($item);
}

解决方案

方法一:直接修改数组后保存

获取模型实例后,直接操作data属性(模型的Attribute已自动将JSON转为关联数组),添加新元素后调用save()即可:

// 假设已通过ID获取目标实例
$item = Item::find($yourItemId);

// 向data数组添加新键值对
$item->data['4'] = 'four';
$item->data['5'] = 'five';

// 保存更改
$item->save();

如果是创建数据后立即添加,可修改控制器代码:

public function index()
{
    $input = [
        'title' => 'Demo Title',
        'data' => [
            '1' => 'One',
            '2' => 'Two',
            '3' => 'Three'
        ]
    ];

    $item = Item::create($input);

    // 添加新元素并保存
    $item->data['4'] = 'four';
    $item->data['5'] = 'five';
    $item->save();

    dd($item);
}

方法二:使用Laravel JSON字段点语法更新

无需先解码整个JSON字段,直接通过点语法操作数据库层面的JSON字段,更高效:

// 通过模型实例更新
$item = Item::find($yourItemId);
$item->update([
    'data->4' => 'four',
    'data->5' => 'five'
]);

// 或通过查询构造器批量更新
Item::where('id', $yourItemId)->update([
    'data->4' => 'four',
    'data->5' => 'five'
]);

注意事项

  • 确保模型中data字段的Attribute配置正确:get方法解码JSON为关联数组,set方法编码数组为JSON,这样才能像操作普通数组一样操作$item->data。
  • 批量添加多元素优先用方法一,仅添加少量特定键值对优先用方法二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:22