Skip to content
Advertisement

How to update deep json data in laravel

I need to update my data in json column.

Code

public function update(Request $request)
{
    $product = Product::findOrFail($request->input('productId'));
    $stock = $product->qty;
    $qty = $request->input('quantity');
    $userId = auth('api')->user()->id;
    
    if (!empty($qty)) {
        if ($qty < $stock) {

            $item = CartStorage::findOrFail($request->input('id'));
            $item->update([
                // I need this to happen
                // cart_data->quantity= $qty;
            ]);
            return response()->json([
                'data' => $item,
                'success' => 'Updated'
            ]);

        } else {
            return response()->json([
                'success' => 'Your quantity request is larger than our stock.'
            ]);
        }
    } else{ // 1. if nothing is given
        return response()->json([
            'success' => 'You need to input new quantity.'
        ]);
    }
}

I have all my data ready in controller and there is no issue with data, all I need is to update my json data mentioned in this part:

$item = CartStorage::findOrFail($request->input('id'));
$item->update([
  // I need this to happen
  // cart_data->quantity= $qty;
]);

Database screenshot

one

Database data cart_data column

"{
    "name":"Option Product",
    "productId":21,
    "price":"370000",
    "quantity":2,           ------> trying to update this value
    "attributes":{
        "attr":{
            "name":"weight",
            "value":"2"
        }
    },
    "conditions":[
        {
            "name":"Colors",
            "value":0
        }
    ]
}"

Any idea?

Advertisement

Answer

The answer from @Kurt Friars is good. If you needed to pull the CartStorage model for some reason and do other things with it, you could update the cart_data like this:

$item = CartStorage::findOrFail($request->input('id'));

// Do whatever else you need

$cartData = $item->cart_data;
$cartData['quantity'] = 4;

$item->update([
    'cart_data' => $cartData
]);
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement