我一直在试图找到一种从我的数据库中获取数据的方法,然后以图表可以读取它的方式显示它。
控制器: $ this->记录 - > 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'
)
正如您所看到的,由于某种原因,impload会移除物质场。我需要它显示如下:
'Underwear', '1'
etc
编辑:
我如何使用hasMany为数据库分配化合物id。因为同一化合物会有很多不同的用户。许多不同的化合物将拥有相同的用户。
我正在阅读文档,但我不知道我是否遗漏了一些东西,但似乎它只是随机删除了文档...它似乎只是告诉你它做了什么以及如何启动它。
如果我现在正在运行查询(我编辑了上面的查询以获得此示例),我将获得值
'5' => '2'
但我想,我需要使用hasMany来关联我的数据库中的内容
ID | Compound
5 | Tables
这样我就可以显示'tables'而不是5
答案 0 :(得分:0)
我觉得你有点困惑。让我们一步一步来。
首先,implode
连接数组的值,而不是键,所以你得到那个输出是合乎逻辑的,它不是“出于某种原因”。阅读the docs关于该功能,非常有助于了解它的作用。
第二......好吧,从我看到的,你正在尝试将php变量与js混合。这是“可能的”,但你需要真正理解你在做什么。 Google Charts或Highcharts使用js构建图形,至少基于您想要的输出。你在控制器中插入变量并在视图中将其打印出来就像一样,这很奇怪。
因此,将$records
变量原样传递给视图。不要试图将其转换为控制器中的js-sufficient-structure。为什么?因为您可以在视图的任何部分使用$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变量。