我一直在努力想办法从我的数据库中获取数据,然后以图表可以读取的方式显示它。
控制器:$this->Record->virtualFields‘’sum‘='COUNT(*)';
$records=$this->Record->find('list',
array('fields' => array('drug_id', 'sum'), // from the table 'drugs' with 2 fields which drug_id and drug
'group' => 'drug_id'));
debug($records);
$chartData[] = implode(', ',$records);
debug($chartData);我的“调试”如何在页面上显示:
/app/Controller/RecordsController.php (line 72)
array(
'Trees' => '2',
'Socks' => '1',
'Things' => '9',
'Mice' => '1',
'Clothes' => '6',
'Shoes' => '4',
'Underwear' => '3',
'Tables' => '6',
'Mouse' => '1'
)
/app/Controller/RecordsController.php (line 74)
array(
(int) 0 => '2, 1, 9, 1, 6, 4, 3, 6, 1'
) 如你所见,由于某种原因,内爆移除了物质字段。我需要它像这样显示:
'Underwear', '1'
etc编辑:
如何使用hasMany在数据库中为化合物分配id。因为同一个化合物会有很多不同的用户。而且许多不同的化合物将有相同的用户。
我正在阅读文档,但我不知道我是否遗漏了什么,但它似乎只是随机地从文档中删除了……它似乎只是告诉你它做了什么以及如何启动它。
如果我现在运行查询(我在本例中编辑了上面的查询),我将获得以下值
'5' => '2'但是我假设需要使用hasMany来关联我的数据库中的内容
ID | Compound
5 | Tables这样我就可以显示'tables‘而不是5
发布于 2013-06-06 10:20:37
我想你有点糊涂了。让我们一步一步来。
首先,implode连接数组的值,而不是键,所以你得到的输出是合乎逻辑的,而不是“出于某种原因”。阅读the docs关于该函数的内容,对了解它的作用非常有帮助。
第二……好吧,据我所知,你正试图将php变量和js混合在一起。这是“可能的”,但你需要真正理解你在做什么。Google Charts或Highcharts使用js构建图形,至少基于您想要的输出。奇怪的是,您在控制器中内爆了一个变量,并在视图中像这样打印它。
因此,将$records变量按原样传递给视图。不要试图在控制器中将其转换为js适当结构。为什么?因为您可以在视图的任何部分使用$records (作为php变量),并仅在js部分中输出必要的结构。
现在,来看一下图表。假设您使用的是Google图表,因为这是我找到的第一个示例。在您的视图中,您应该有类似以下内容的内容
<script type="text/javascript">
//definitions of your chart, I'm not going to do that here
//the data part
var data = new google.visualization.DataTable();
data.addRows([
['Mushrooms', 3],
['Onions', 1],
['Olives', 1],
]);这就是您想要从php-find-variable“转换”到js的数据,对吧?为此,您可以这样做
//the data part
var data = new google.visualization.DataTable();
data.addRows([
<?php
foreach($records as $compound => $sum)
echo "['".$compound."', ".$sum."], ";
?>
]);而且你应该有你需要的js格式。检查语法,不过,我没有测试它,所以可能有一个逗号或什么,你需要添加到该echo。
我希望我说得够清楚了。如果您对这里的任何内容感到困惑,我建议您阅读有关在js中使用php变量的内容。
https://stackoverflow.com/questions/16935403
复制相似问题