我有一个表,其中有一个列(名为order_data
),它将数据保存为Json,现在我想从该列中检索数据,但我得到的只是列数据本身作为下面的示例
"{\"29\":{\"id\":29,\"name\":\"effewf\",\"price\":24524,\"quantity\":1,\"attributes\":[],\"conditions\":[]}}"
我的问题是:
如何从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]。
答案 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
}