Php 为什么可以';在Codeigniter中使用Chart.js创建月度销售报告
我有一张用chart.js创建的图表 我每天都从数据库中获取总收入,有些日子没有这样的收入:Php 为什么可以';在Codeigniter中使用Chart.js创建月度销售报告,php,codeigniter,chart.js,Php,Codeigniter,Chart.js,我有一张用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
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,';
}
}
/$kazanc\u v是来自控制器的销售日期数组
对于($i=1;$i首先,让我们澄清一下,我看到了$kazanc\u v[0]
和$kazanc\u v->sub\u 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轴。
在你的情况下一个月的总天数(我们考虑为31天)
您有一个带有日期的数组,现在您可以使用来自模型的数据创建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轴)
最后,我们可以在视图中打印数据
// 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
}
]
},
//在您的视图中
变量选项={
键入:“行”,
数据:{
标签:,
数据集:[
{
标签:“#总数量”,
数据:,
边框宽度:1
}
]
},
示例工作代码(php)
jsfiddle for chartjs。可能有一种更优雅的方法,但这在过去对我很有效。首先生成一个带有键的数组(和默认值0
值)您要查看的日期。然后您可以迭代该数组,用数据库中的现有数据填充该数组。这样,所有日期都有一个条目和一个值,因此在chart.js中输出它变得很简单。添加代码,从控制器获取数据以供查看,但不会在非销售日期写入“0”,因为没有数据。您可以发布生成的实际JS(并且正在创建图表)?只有显示它不起作用的图像真的很难提供更多帮助。JS文件来自原始的图表。JS网站ı对JS文件没有问题。我的问题在于我的代码。ı无法为($i=1;$i)在javascript数据集上写入“0”
// 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
}
]
},