使用带有laravel的chart.js从控制器传递数据到

时间:2015-07-13 04:28:19

标签: javascript php laravel eloquent chart.js

尝试在我的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。我猜测我不是以正确的格式传递数据,但不确定我将如何做到这一点。我可以确认数据是从控制器传递到视图,因为我可以转储变量并查看数据。显然它不是图表可以理解的格式。 任何信息将不胜感激。只是向正确的方向推动会有所帮助。 非常感谢, 粘土

2 个答案:

答案 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));
}