データベース テーブルのデータを棒グラフで表示したいと考えていました。HighCharts ライブラリを使用しました。チャートには明らかにデフォルトのテンプレート データが読み込まれています。しかし、データベースからのデータを表すことができるように、いくつかの変更を加えました。ロジックの流れは正しいと思いますが、今は何も表示されません。参考までに: JSON と AJAX に関する私の知識は非常に大きいです。
意見:
<script type="text/javascript">
$(document).ready(function() {
Highcharts.setOptions({
colors: ['#e74c3c']
});
$(function () {
$('#container').highcharts({
chart: {
type: 'bar'
},
title: {
text: 'Daily Income'
},
xAxis: {
categories: ['2013-08-10', '2013-08-11', '2013-08-12']
},
yAxis: {
title: {
text: 'Daily Income From Banquet Reservations For Last 30 Days'
}
},
series: <?php echo $json; // echo encoded data ?>
}],
});
});
});
</script>
...
<div id="container" style="width:100%; height:400px;"></div>
コントローラ:
function bqt_daily_income() {
$this->load->model('reports_model');
$this->load->model('json_model'); // load model
$report['query'] = $this->reports_model->bqt_daily_income();
$table['income'] = $this->json_model->bqt_daily_income(); // fetch data from mysql database
$json['table'] = json_encode($table); // encode to json
$data = array_merge($report, $json); // merge with other arrays as i also have a html table with raw data from database
$role = $this->session->userdata('role');
if ($role === 'admin') { $this->load->view('reports/bqt_daily_income_view', $data); } // load view with data array (merged)
else if ($role === 'manager') { $this->load->view('error'); }
else if ($role === 'user') { $this->load->view('error'); }
else { $this->load->view('login');}
}
モデル: (json_model)
function bqt_daily_income($json_data = array()) {
$query = $this->db->query("SELECT DATE(time_stamp) AS day, SUM(paid) AS income FROM payments WHERE type = 'Banquet Reservation' GROUP BY day ORDER BY time_stamp DESC LIMIT 30");
if ($query->num_rows() > 0) {
foreach($query->result_array() as $row) {
$json_data[$row['day']] = $row['income'];
}
}
return $json_data;
}