我有一个使用 Chart.js 创建的图表
我每天从数据库中获取总计,有时没有这样的收入:
id | seller | date | quantity | price | total
1 3636 2019-10-09 10:00 4 1,2 4,8
2 3045 2019-10-09 15:51 2 0,6 1,2
3 3636 2019-10-06 11:05 8 1,0 8,0
4 3636 2019-10-04 14:03 5 0,9 4,5
5 3636 2019-10-01 14:57 3 0,4 1,2
如您所见,10 月 9 日有 2 笔销售,10 月 6 日有 1 笔销售,10 月 4 日有 5 笔销售,10 月 1 日有 1 笔销售。
我为此创建了一个代码,但效果不佳:
//$kazanc_v is sales dates array which is come from the controller
for($i=1;$i<31;$i++)
{
$arr2[]=date('Y').'-'.date('m').'-'.$i;
}
for($k=0;$k<30;$k++){
if(in_array($arr2[$k],$kazanc_v[0])){
echo $kazanc_v->sub_total;
} else {
echo '0,';
}
}
当我将数据放入数据集中时,图表如下所示:
看不到img:wrong chart
我无法在图表数据中写入“0”,因为表中没有数据。 我想在日期没有销售时写 0,图表应该是这样的,我想要
对于看不到img:[october reports] 3
如何创建真实的报告?
最佳答案
首先,让我们澄清一下,我看到 $kazanc_v[0]
和 $kazanc_v->sub_total
这是对象还是数组?这个变量的输出是什么?
使用此类输出也会迫使您犯错误。如果您想显示每个日期的销售总数或总价,您应该从数据库中获取按日期分组的数据。
模型中的查询应该是这样的;
//in your model
$this->db->select("count(quantity) as qty, DATE(order_date) as date")
->from("orders")
->where(order_date > "2021-01-01") //beginning of this month
->group_by('date')
->get()
->result_array()
;
现在,您需要首先创建x-axis
。
在您的情况下,一个月中的总天数(我们认为是 31 天)
//in your controller
$begin = new DateTime( date('Y-m-01') ); //or given date
$end = new DateTime( date('Y-m-t') );
$end = $end->modify( '+1 day' );
$interval = new DateInterval('P1D');
$dateRange = new DatePeriod($begin, $interval ,$end);
您有一个包含日期的数组,现在您可以使用来自模型的数据创建带有 y 和 x 轴的图表数据。
$chartData =[];
$kazanc = $this->some_model->some_method();
foreach($dateRange as $date){
$dataKey = array_search($date->format("Y-m-d"), array_column($kazanc, 'date'));
if ($dataKey !== false) { // if we have the data in given date
$chartData[$date->format("Y-m-d")] = $kazanc[$dataKey]['qty'];
}else {
//if there is no record, create default values
$chartData[$date->format("Y-m-d")] = 0;
}
}
//send data to view
$this->load->view('template', ["chartData" => $chartData]);
现在,您在 $chartData
变量中拥有 31 天数据的日期(x 轴)和数量(y 轴)。
最后,我们可以在 View 中打印数据。根据chartjs文档,是这样的。
// in your view
var options = {
type: 'line',
data: {
labels: <?php echo json_encode(array_keys($chartData)); ?>,
datasets: [
{
label: '# Total Quantity',
data: <?php echo json_encode(array_values($chartData)); ?>,
borderWidth: 1
}
]
},
示例工作代码(php)https://www.tehplayground.com/pmiPYk3yhIpExJqa
用于图表js的jsfiddle。 https://jsfiddle.net/jwf67voe/
关于php - 为什么我无法在 Codeigniter 中使用 Chart.js 创建月度销售报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58330220/