尝试在我的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
这不起作用。图表占位符显示但似乎数据被读取为null。我猜测我不是以正确的格式传递数据,但不确定我将如何做到这一点。我可以确认数据是从控制器传递到视图,因为我可以转储变量并查看数据。显然它不是图表可以理解的格式。 任何信息将不胜感激。只是向正确的方向推动会有所帮助。 非常感谢, 粘土
答案 0 :(得分:1)
原来,这是&#39;日期&#39;导致问题的变量(除了语法错误)。 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
传递给了视图。
我确信这是一个更好的方法,但我每天都在学习更多,这对我有用!
答案 1 :(得分:0)
在你的模特中;
使用此
public function getCreatedAtAttribute($value)
{
return date('m/d/Y', strtotime($value));
}