[英]Using chart.js with laravel passing data from controller to view
尝试在我的laravel应用中利用chart.js。 在我的控制器中,我正在使用Eloquent来执行数据库的简单查询:
//sampleController.php
public function test()
{
$inventories = Inventory::all();
$dates = $inventories->lists('updated_at');
$totals = $inventories->lists('item_4801');
return view('pages.test')
->with('dates')
->with('totals');
}
我将“日期”和“总计”传递给我的观点:
//test.blade.php
@extends('app')
@section('content')
<canvas id="myChart" width="400" height="400"></canvas>
@stop
@section('footer')
<script src="assets/admin/js/Chart.min.js"></script>
<script>
var ctx = document.getElementById("myChart").getContext("2d");
var data = {
labels: {!! json_encode($dates) !!},
datasets: [
{
label: "My Data",
data: {!! json_encode($totals) !!}
}
]
};
var myLineChart = new Chart(ctx).Line(data);
</script>
@stop
这行不通。 图表占位符显示出来,但似乎数据被读取为空。 我猜我只是没有以正确的格式传递数据,但不确定确切如何做。 我可以确认数据正在从控制器传递到视图,因为我可以转储变量并查看数据。 显然,它不是chartjs可以理解的格式。 任何信息将不胜感激。 朝正确的方向轻推就可以帮助。 非常感谢,克莱
事实证明,这是导致问题的“ dates”变量(除了语法错误)。 Chartjs正在寻找一个像这样的数组: ["2015/06/08", 2015/06/13", "2015/6/20"]
而不是雄辩的查询中的集合对象。所以我运行了$dates = array_column($inventories->toArray(), 'updated_at');
获取数组,然后通过运行以下命令重新格式化日期:
foreach ($dates as $date){
$formatted_dates[] = date('m/d/Y', strtotime($date));
}
然后,我将$formatted_dates
传递给视图。 我敢肯定有更好的方法,但是我每天都在学习,它对我有用!
在您的模型中;
用这个
public function getCreatedAtAttribute($value)
{
return date('m/d/Y', strtotime($value));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.