Я работаю над yii2
. Я установил библиотеку canvas js, попытался запустить пример примера диаграммы. Теперь я хочу получить sh данные из моей базы данных. Я могу просматривать отдельные данные из моей БД, но я хочу поместить все данные при обновлении базы данных, т.е. у меня есть кнопка, и по этой кнопке моя таблица обновляется в течение этого периода. Я хочу обновить свою диаграмму, чтобы показать обновленное значение (я).
Примечание: Диаграмма должна отображать тренд
Ниже приведен код моего контроллера, из которого я вставляю данные в свою таблицу
public function actionData()
{
try {
$cust_met_data = Yii::$app->db->createCommand(
"SELECT m.`meter_id` , m.`msn` ,
m.`cust_id` , m.`device_id` FROM `mdc_meter_cust_rel` m ")->queryAll();
} catch (Exception $e) {
}
$slave_id = $cust_met_data[0]['device_id'];
$address = 0;
$count = 14;
$msn = $cust_met_data[0]['msn'];
$cust_id = $cust_met_data[0]['cust_id'];
// my base URL
$api_url = 'https://localhost:44337/api/rtu/GetData/' . $slave_id . '/' . $address . '/' . $count;
$curl = curl_init($api_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$curl_response = curl_exec($curl);
$json = json_decode($curl_response);
if($json->{0} == '06')
{
Yii::$app->getSession()->setFlash('error', '
<div class="alert alert-error alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
<strong>No Communication! </strong> Meter Data is Unavailable.</div>');
return $this->redirect(['index']);
}
else
{
$vol_1 = $json->{0};
$vol_2 = $json->{1};
$vol_3 = $json->{2};
$curr_1 = $json->{3};
$curr_2 = $json->{4};
$curr_3 = $json->{5};
$kwh = $json->{6};
$model = new MdcmetersData();
$model->load(Yii::$app->request->post());
$model->data_date_time = date('Y-m-d H:i:s');
$model->device_id = $slave_id;
$model->msn = $msn;
$model->cust_id = $cust_id;
$model->voltage_p1 = $vol_1;
$model->voltage_p2 = $vol_2;
$model->voltage_p3 = $vol_3;
$model->current_p1 = $curr_1;
$model->current_p2 = $curr_2;
$model->current_p3 = $curr_3;
$model->kwh = $kwh;
if($model->save())
{
return $this->redirect(['index', 'model' => $model]);
}
else
{
return $this->redirect(['index']);
}
}
}
Индекс. php
<script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<?PHP
$model = $dataProvider->getModels()[0];
$model['data_date_time'];
$dataPoints1 = array(
array("label"=> $model['data_date_time'], "y"=> $model['kwh']),
);
?>
<div id="chartContainer1" style="width: 100%; height: 300px;display: inline-block;"></div>
<p>
<?= Html::a('Get Meter Data', ['data'], ['class' => 'btn btn-success']) ?>
</p>
<script>
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer1", {
animationEnabled: true,
theme: "light2",
title:{
text: "kWh of Meter"
},
legend:{
cursor: "pointer",
verticalAlign: "center",
horizontalAlign: "right",
itemclick: toggleDataSeries
},
data: [{
type: "column",
name: "kwh",
indexLabel: "{y}",
showInLegend: true,
dataPoints: <?php echo json_encode($dataPoints1, JSON_NUMERIC_CHECK); ?>
}
]
});
chart.render();
function toggleDataSeries(e){
e.dataSeries.visible = !(typeof (e.dataSeries.visible) === "undefined" || e.dataSeries.visible);
chart.render();
}
};
Выходной сигнал диаграммы

Показано только одно значение, но на самом деле у меня есть несколько значений.
Я искал решение, но все, что я нашел, - это традиционный способ получения данных sh. то есть в PHP я должен выполнить запрос, а затем выполнить действие над ним. Пример показан здесь PHP Данные диаграммы из базы данных
Как я могу это сделать? Любая помощь будет высоко ценится