2017-05-04 53 views
0

我對CakePhP3有點新,我正試圖在ChartJs中生成一些報告。CakePhp3 - 顯示ChartJs上的值

我有一張名爲「收入」的表格。

CREATE TABLE `incomes` (
`id` bigint(100) NOT NULL AUTO_INCREMENT, 
`title` varchar(500) NOT NULL, 
`description` varchar(5000) NOT NULL, 
`branch_id` bigint(100) NOT NULL, 
`amount` double NOT NULL, 
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP, 
`comments` varchar(50000) DEFAULT NULL, 
`status` tinyint(1) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 

,我想展現給每月產生的總收入量上的圖表值。例如 - 一月一萬,三月二萬。

// Get context with jQuery - using jQuery's .get() method. 
var areaChartCanvas = $("#areaChart").get(0).getContext("2d"); 
// This will get the first returned node in the jQuery collection. 
var areaChart = new Chart(areaChartCanvas); 

var areaChartData = { 
    labels: ["January", "February", "March", "April", "May", "June", "July","August", "September", "October", "November", "December"], 
    datasets: [ 
    { 
     label: "Electronics", 
     fillColor: "rgba(210, 214, 222, 1)", 
     strokeColor: "rgba(210, 214, 222, 1)", 
     pointColor: "rgba(210, 214, 222, 1)", 
     pointStrokeColor: "#c1c7d1", 
     pointHighlightFill: "#fff", 
     pointHighlightStroke: "rgba(220,220,220,1)", 
     data: [65, 59, 80, 81, 56, 55, 40] 
    } 
    ] 
}; 

我該怎麼辦加載收入模型PagesController,並顯示他們在圖表上?我是否將值作爲JSON發送,或者程序是什麼?

+0

是可能的方法之一將派遣JSON DATAS到風景。在CakePHP中,你可以使用序列化方法來做到這一點。 https://book.cakephp.org/3.0/en/views/json-and-xml-views.html –

+0

<?php echo json_encode($ incomeTotal,JSON_HEX_TAG); ?>找到了將其轉換爲JSON的方式。如何過濾出相關月份的金額並顯示出來? –

+0

@KasunWijesekara按月搜索「cakephp羣組」,你會得到主意 –

回答

2

你可以這樣做

在控制器

 $this->loadModel('Incomes'); 
     $incomes = $this->Incomes->find('list', [ 
      'keyField' => 'month', 
      'valueField' => 'amount', 
      'fields'=>[ 
       'month' => 'MONTHNAME(created)', 
       'amount' => 'SUM(amount)' 
      ], 
      'group' => ['month'], 
      'order'=>['MONTH(created)'=>'ASC'], 
     ])->toArray(); 

     $months = json_encode(array_keys($incomes)); 
     $amounts = json_encode(array_values($incomes)); 
     $this->set('months', $months); 
     $this->set('amounts', $amounts); 

鑑於

// Get context with jQuery - using jQuery's .get() method. 
var areaChartCanvas = $("#areaChart").get(0).getContext("2d"); 
// This will get the first returned node in the jQuery collection. 
var areaChart = new Chart(areaChartCanvas); 

var areaChartData = { 
    labels: <?= $months; ?>, 
    datasets: [ 
    { 
     label: "Electronics", 
     fillColor: "rgba(210, 214, 222, 1)", 
     strokeColor: "rgba(210, 214, 222, 1)", 
     pointColor: "rgba(210, 214, 222, 1)", 
     pointStrokeColor: "#c1c7d1", 
     pointHighlightFill: "#fff", 
     pointHighlightStroke: "rgba(220,220,220,1)", 
     data: <?= $amounts; ?> 
    } 
    ] 
}; 
+0

感謝。今天幫助我兩次!再次感謝。 –

+0

任何來源我可以看更多的這個問題? :) –

+1

@KasunWijesekara單擊此處查看此鏈接https://book.cakephp.org/3.0/zh/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs –