繁体   English   中英

结合使用chart.js和laravel从控制器传递数据到视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM