从laravel数据库中检索Json值

时间:2018-01-12 00:41:57

标签: php json laravel

我有一个表,其中有一个列(名为order_data),它将数据保存为Json,现在我想从该列中检索数据,但我得到的只是列数据本身作为下面的示例

"{\"29\":{\"id\":29,\"name\":\"effewf\",\"price\":24524,\"quantity\":1,\"attributes\":[],\"conditions\":[]}}"

screenshot

我的问题是:

  

如何从json列中获取Product->title等数据   我的示例代码中的effewf或价格等。

这是我目前的职能:

public function index()
    {
        $orders = Order::orderby('id', 'desc')->paginate(10);
        return view('admin.orders.index', compact('orders'));
    }

PS:我清理了我的功能,因为我尝试过的所有方法都没有用,所以你有干净的功能来帮我解决这个问题。

以下是我的尝试:

orderss = Order::orderby('id', 'desc')->get(); 
$orderss = json_decode($orderss->order_data);

我收到了这个错误:

  

此集合实例上不存在属性[order_data]。

4 个答案:

答案 0 :(得分:2)

你需要使用以下内容循环遍历您传递的变量:

<div class="container">
@foreach ($orders as $order )
    {{ dd(json_decode($order->order_data, true))}}
@endforeach
</div>

答案 1 :(得分:0)

您应该尝试通过php json decoder

发送它
 json_decode($data);

答案 2 :(得分:0)

您可以在模型中将类型强制转换为JSON或数组:

class Order extends Model {
  protected $casts =[
    'order_data'=>'json' //'array'
  ];
}

答案 3 :(得分:0)

这是您的JSON字符串的样子:

{
    "29": {
        "id": 29,
        "name": "effewf",
        "price": 24524,
        "quantity": 1,
        "attributes": [],
        "conditions": []
    }
}

首先必须使用json_decode将其解码为stdclass,然后使用您的值:

<div class="container">
@foreach ($orders as $jsonStr )
    {{--*/ $order = json_decode($jsonStr) /*--}}
@endforeach
</div>

请注意,$order现在包含您的json,但是您遇到了问题,因为您的第一个元素是数字。除非你提前知道这个数字,否则你很难找到它:

$number = "29"; // in your case but has to be parsed
$product = $order->$b;

现在产品变量可以用作对象:

$product->id;
$product->price;
// etc.

附加:

我可能不推荐这个,相反你应该重新设计你的json字符串。但无论如何,这是我如何检索数字。

$a = json_decode($jsonStr);
$b = get_object_vars($a);
$keys = array_keys($c);

foreach($keys as $key){
   // $key is now your key
}