Php 为EFlot图表传递数据
我试图生成一个简单的温度数据折线图。数据库中的表如下所示:Php 为EFlot图表传递数据,php,yii,Php,Yii,我试图生成一个简单的温度数据折线图。数据库中的表如下所示: CREATE TABLE temperature( id INTEGER PRIMARY KEY NOT NULL, locationId INTEGER, value REAL NOT NULL, createDate DATETIME NOT NULL, FOREIGN KEY(locationId) REFERENCES location(id)); ... [{'la
CREATE TABLE temperature(
id INTEGER PRIMARY KEY NOT NULL,
locationId INTEGER,
value REAL NOT NULL,
createDate DATETIME NOT NULL,
FOREIGN KEY(locationId) REFERENCES location(id));
... [{'label':'line','data':[[1,1],[2,7],[3,12],[4,32],[5,62],[6,89]], ...
...
'data'=>$model->getGraphData(),
....
我感兴趣的栏目有:createDate
和value
我尝试使用,它希望数据以数组的形式出现,例如:
'data'=>array(
array(1,1),
array(2,7),
array(3,12),
array(4,32),
array(5,62),
array(6,89),
),
当我使用这样的静态数组时,我的浏览器会显示如下脚本数据:
CREATE TABLE temperature(
id INTEGER PRIMARY KEY NOT NULL,
locationId INTEGER,
value REAL NOT NULL,
createDate DATETIME NOT NULL,
FOREIGN KEY(locationId) REFERENCES location(id));
... [{'label':'line','data':[[1,1],[2,7],[3,12],[4,32],[5,62],[6,89]], ...
...
'data'=>$model->getGraphData(),
....
这张图自然可以正常工作
但是,我无法从模型中动态地表达数据。例如,我尝试了以下方法:
$arr = Yii::app()->db->createCommand('SELECT id, value FROM temperature')->queryAll();
....
'data'=>$arr,
其评估为:
... $.plot($('#yw2'), [{'label':'line','data':[{'id':'949','value':'20.812'},{'id':'950','value':'20.875'},{'id':'951','value':'21.125'},{'id':'952','value':'21.25'},{'id':'953','value':'21.312'},{'id':'954','value':'21.375'}], ....
而且这个图表不起作用
我想,最终的目标是为模型提供一个函数,所以我可以这样使用它:
CREATE TABLE temperature(
id INTEGER PRIMARY KEY NOT NULL,
locationId INTEGER,
value REAL NOT NULL,
createDate DATETIME NOT NULL,
FOREIGN KEY(locationId) REFERENCES location(id));
... [{'label':'line','data':[[1,1],[2,7],[3,12],[4,32],[5,62],[6,89]], ...
...
'data'=>$model->getGraphData(),
....
但是,如何构造这样一个函数呢?
它应该返回什么才能让这个图表正常工作?好的,我把它整理好了
public function getGraphData()
{
$criteria=new CDbCriteria;
$criteria->addCondition('createDate > datetime(\'now\', \'-1 day\', \'localtime\')');
$sort = new CSort();
$sort->defaultOrder='createDate';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>$sort,
'pagination'=>false,
));
}
foreach($model->getGraphData()->getData() as $row) {
$data[]=array($row['id'],$row['value']);
};
$this->widget('application.extensions.EFlot.EFlotGraphWidget',
array(
'data'=>array(
array(
'label'=> 'line',
'data'=>$data,
'lines'=>array('show'=>true),
'points'=>array('show'=>true),
),
),
'options'=>array(
'legend'=>array(
'position'=>'nw',
'show'=>true,
'margin'=>10,
'backgroundOpacity'=> 0.5
),
),
'htmlOptions'=>array(
'style'=>'width:800px;height:400px;'
)
)
);