dang quang hai
dang quang hai

Reputation: 21

How to access a value in json from laravel?

I have 3 tables

Product(id, sku, product_name) 
product_sales_forecast_3(id,product_id)
product_sales_forecast_detail_3(id,product_sales_forecast,forecast,year)

forecast field in table product_sales_forecast_detail_3 is a JSON, it looks like:

{"25":{"qty":0},"26":{"qty":0},"27":{"qty":0},"28":{"qty":0},"29":{"qty":0},"30":{"qty":1},"31":{"qty":0},"32":{"qty":0},"33":{"qty":1},"34":{"qty":1},"35":{"qty":0},"36":{"qty":0},"37":{"qty":0},"38":{"qty":0},"39":{"qty":0},"40":{"qty":0},"41":{"qty":0},"42":{"qty":0},"43":{"qty":0},"47":{"qty":0},"48":{"qty":0},"49":{"qty":0},"50":{"qty":0},"51":{"qty":0},"52":{"qty":0}}

In laravel controller I wrote:

 $DataForecasts=DB::table('product_sales_forecast_3')
->join('product_sales_forecast_detail_3','product_sales_forecast_3.id',
"=",'product_sales_forecast_detail_3.product_sales_forecast_id')
->join('products','products.id','=','product_sales_forecast_3.product_id')
->select('product_sales_forecast_detail_3.forecast')
->where([
        ['product_sales_forecast_3.channel','=', $AVCWHStoreID],
        ['products.product_sku','=', $sku],
        ['product_sales_forecast_detail_3.year','=', 2019]
        ])->get();

        $objs = json_decode($DataForecasts);
       foreach($objs as  $obj)
       {
        dd($obj);
       }

The result is:

{#1457 ▼ +"forecast": "{"1":{"qty":145},"2":{"qty":0},"3":{"qty":0},"4":{"qty":0},"5":{"qty":0},"6":{"qty":0},"7":{"qty":58},"8":{"qty":69},"9":{"qty":74},"10":{"qty":97},"11":{"qty":69},"12":{"qty":69},"13":{"qty":74},"14":{"qty":95},"15":{"qty":94},"16":{"qty":93},"17":{"qty":87},"18":{"qty":85},"19":{"qty":79},"20":{"qty":80},"21":{"qty":77},"22":{"qty":64},"23":{"qty":68},"24":{"qty":63},"25":{"qty":63},"26":{"qty":60},"27":{"qty":70},"28":{"qty":83},"29":{"qty":99},"30":{"qty":86},"31":{"qty":29},"32":{"qty":68},"33":{"qty":68},"34":{"qty":62},"35":{"qty":63},"36":{"qty":66},"37":{"qty":66},"38":{"qty":65},"39":{"qty":55},"40":{"qty":39},"41":{"qty":63},"42":{"qty":52},"43":{"qty":52},"44":{"qty":47},"45":{"qty":64},"46":{"qty":74},"47":{"qty":80},"48":{"qty":105},"49":{"qty":102},"50":{"qty":106},"51":{"qty":88},"52":{"qty":68}} ◀"}

I try to access a value but I don't know how to access the values.

Upvotes: 0

Views: 118

Answers (3)

Zar Ni Ko Ko
Zar Ni Ko Ko

Reputation: 352

Change in your controller like ...

$DataForecasts=DB::table('product_sales_forecast_3')
->join('product_sales_forecast_detail_3','product_sales_forecast_3.id',
"=",'product_sales_forecast_detail_3.product_sales_forecast_id')
->join('products','products.id','=','product_sales_forecast_3.product_id')
->select('product_sales_forecast_detail_3.forecast')
->where([
        ['product_sales_forecast_3.channel','=', $AVCWHStoreID],
        ['products.product_sku','=', $sku],
        ['product_sales_forecast_detail_3.year','=', 2019]
        ])->get()->toArray();

        $objs = json_decode($DataForecasts['forecast'],true);
        foreach($objs as  $key=>$val)
        {
            var_dump($key) // week here
            var_dump($val['qty'])
        }

Upvotes: 1

metropolision
metropolision

Reputation: 405

You can use json_decode, jms/serializer, or symfony/serializer.

Upvotes: 1

Zar Ni Ko Ko
Zar Ni Ko Ko

Reputation: 352

Try this ...

<?php

$objs = '{ 
    "forecast": 
    {
        "1":{"qty":145}
        ,"2":{"qty":0}
        ,"3":{"qty":0}
        ,"4":{"qty":0}
        ,"5":{"qty":0}
        ,"6":{"qty":0}
        ,"7":{"qty":58}
        ,"8":{"qty":69}
        ,"9":{"qty":74}
        ,"10":{"qty":97}
        ,"11":{"qty":69}
        ,"12":{"qty":69}
        ,"13":{"qty":74}
        ,"14":{"qty":95}
        ,"15":{"qty":94}
        ,"16":{"qty":93}
        ,"17":{"qty":87}
        ,"18":{"qty":85}
        ,"19":{"qty":79}
        ,"20":{"qty":80}
        ,"21":{"qty":77}
        ,"22":{"qty":64}
        ,"23":{"qty":68}
        ,"24":{"qty":63}
        ,"25":{"qty":63}
        ,"26":{"qty":60}
        ,"27":{"qty":70}
        ,"28":{"qty":83}
        ,"29":{"qty":99}
        ,"30":{"qty":86}
        ,"31":{"qty":29}
        ,"32":{"qty":68}
        ,"33":{"qty":68}
        ,"34":{"qty":62}
        ,"35":{"qty":63}
        ,"36":{"qty":66}
        ,"37":{"qty":66}
        ,"38":{"qty":65}
        ,"39":{"qty":55}
        ,"40":{"qty":39}
        ,"41":{"qty":63}
        ,"42":{"qty":52}
        ,"43":{"qty":52}
        ,"44":{"qty":47}
        ,"45":{"qty":64}
        ,"46":{"qty":74}
        ,"47":{"qty":80}
        ,"48":{"qty":105}
        ,"49":{"qty":102}
        ,"50":{"qty":106}
        ,"51":{"qty":88}
        ,"52":{"qty":68} 
    }  
    }';
$objs = json_decode($objs);
foreach($objs->forecast as $key=>$val)
{
    //var_dump($key);  // $key will be week
    //var_dump ($val->qty); // qty here
}

If array , change foreach loop like following code ..

   foreach($objs['forecast'] as $key=>$val)
   {
      // var_dump($key);  // $key will be week
      // var_dump ($val['qty']); qty here
    }

Upvotes: 2

Related Questions